
Develop a scalable job portal using Node.js, TypeScript and SQL, covering authentication, candidate profiles, skills, education, companies and images, plus one-to-many and many-to-many relationships, error handling, validation and Redis integration.
This is an additional content from another course "NodeJS Typescript - Build eCommerce Project"
If you don't want to learn the basic stuff. Feel free to skip it and go to the project section, which is "Big Project Time" Section
Learn the client and server model, where a client uses a browser or app to request data from a server that stores the data and responds with the web page.
Explore the HTTP protocol by examining request structure, methods (get, post, put, delete), headers, URL and version 1.1, and JSON bodies used to create or update resources.
Explore the http request structure, including method, url, version, and headers, and see how get, post, put, and release operate with optional authorization and a json body.
When you enter a website, the browser resolves the domain to an IP address via DNS, then sends a request and receives HTML and JavaScript to render.
Explore how port numbers identify a specific service on a domain or IP address, using 443 as the default port and likening ports to rooms in a beach house.
Discover how to build a large website by dividing it into features such as hub (home), video, marketplace, group, and game, and implement cross operations—create, read, update, and delete.
Explore how http status codes classify responses into informational, successful, redirection, client error, and server error, with 200 and 201 signaling success and common errors guiding handling.
Explains the client-server model, why localhost works only on your computer, and how hosting, IP addresses, and domain names enable a website to be accessible on the internet.
Explore global objects in node.js by logging a global list and using set timeout and set interval, then contrast with the browser window and node.js runtime outside the browser.
Explore the require keyword in node.js, import and export functions across files with module.exports, and organize modular logic for a job portal project.
Explore the Node.js built-in fs module by reading and writing files, handling absolute paths, encoding with utf-8, and comparing synchronous and asynchronous operations through practical examples.
Learn how Node.js handles the file system with asynchronous read and write operations using promises and then, revealing non-blocking execution and the event loop.
Discover how to use the event emitter in Node.js: create and listen to events with on and emit, subscribe to a channel, and handle multiple listeners.
Learn to send emails by reading index.html content in a Node.js setup, manipulating HTML for email sending, and later switch to Express.js with a template engine for cleaner delivery.
Learn how to divide a Node.js server into multiple routes by inspecting request.url, handling home base and about base, and routing html responses with simple if-else logic.
Learn how to send JSON from a Node.js server to the client, convert product arrays into JSON, set the content-type to application/json, and view the resulting data in the browser.
Learn to send data in the request body from client to server using the post method, test with Postman, and update the products array with JSON from the body.
Learn to handle a get request for a specific product by parsing the URL path to extract the product id and return the matching product as json.
Implement a not found exception handler in a NodeJS TypeScipt job portal backend using if/else logic and logging to return 'product not found' when data is undefined.
Introduce npm, a JavaScript package manager that installs with Node.js and manages packages. Learn how to use npm, explore packages like express.js, and when to use nvm for Node.js projects.
Learn how Express.js serves as the minimal, flexible web framework for Node.js. Explore routing, middleware, npm setup, and creating a simple index.js with a hello express message.
Create a web server using express.js by handling request and response, defining app.get routes, and running the server to display hello world.
Learn how express.js builds responses by setting status codes and content types, and how JSON payloads are automatically handled.
Explore how Express.js in Node.js handles routing with the get method and URLs, using a concise router pattern and callbacks to send responses and emails while avoiding messy if blocks.
Explore URL parts, including path parameters and query strings, and learn how Express exposes them via req.params and the query object, with examples like /products/:id and /orders/1?title=ABC.
Create a rest api to fetch a single product by id with the /products/:id endpoint, converting the id to a number and returning the matching product.
Learn to automate restarting a node application on code changes using a dev dependency, npm scripts (npm run dev), and explain dev versus production dependencies for an express server.
Build a rest api with express.js to create products via a post to /products, parsing json with app.use(express.json) and reading req.body.name to build a new product.
Update item: implement a Node.js TypeScript api to update a product by id, parsing the id, updating name and status from the request body, and handling not found errors.
Delete an item in the rest api by locating the product, handling not-found cases, and removing it, with the message a block was removed.
Introduce middleware in Express.js by showing how app.use registers a middleware function that processes requests, uses next to continue the flow, and how skipping next halts the response.
Master the mvc design pattern by tracing a user request from controller to model to view, where the model defines data and connects to the database.
Refactor the project into the model view controller structure by creating models and controllers folders, moving product data into a model, and wiring the controller to get all products.
Learn to organize express routes with the express router for modular routes of resources like products and categories. Use app.use and middleware to keep the codebase scalable and well structured.
Create a new Node.js project by making a folder and opening it in VS Code. Run npm init -y, install express, create index.js, and start the server on port 5000.
Set up an mvc folder structure for a nodejs project, create a user controller and user model, implement a hello world route, and run the app on localhost 5000.
Set up a MongoDB Atlas database, create a cluster, configure a database user, enable network access from anywhere, and copy the connection URL for Express integration.
Learn how to connect Express.js to MongoDB using Mongoose, install the mongoose package, and configure a connection with a MongoDB URL to test the database.
Explore how MongoDB stores data as documents in collections, define a user schema with email, password, and full name, and build a Mongoose model with Express routes.
learn to handle database errors in Node.js using a try-catch block, returning a status with 5000 and a something went wrong message when database access fails.
Learn JSON web tokens in a NodeJS project by building a user controller, registering a user, and issuing a signed access token sent to the client.
Register a user and set up authentication with a JSON web token. Create a user controller and generate an access token for secure login.
Ensure email uniqueness in a Node.js mongoose API by checking existing records before creation, returning a clear 'email already exists' message and avoiding duplicate responses.
Learn to hash and mask passwords, compare hashes on login, and securely store password hashes in the database in a Node.js TypeScript job portal project, using a hybrid library.
Copy the model into a task model, rename it to a task schema, add a schedule schema and a password field, and wire the controller and index.js for creating tasks.
Learn to model tasks linked to a user with a mongoose schema, and create tasks using the task controller by providing title, description, status, and user id.
Explore task authentication in an express app using authorization headers and json web tokens. Learn to sign and verify tokens and manage login flows for a nodejs typescript job portal.
Implement a get all tasks endpoint by building a controller method that reads tasks from the document model and filters by the logged-in user with a bearer token.
Learn how to fetch a single task by id, handle the request with a try-catch block, and ensure the task belongs to the current user using model queries.
Learn to implement a secure update task flow in a node.js typescript project by validating task existence, enforcing user ownership via token authentication, and updating status.
Develop the delete task flow in a nodejs typescript job portal, deleting by id in mongo and ensuring the current user can only remove their own tasks.
Wrap up this module by reviewing the Mongo database setup and controller models; identify boilerplate code and prepare to fix issues in the upcoming e-commerce process.
Explore the array datatype in TypeScript by creating a const array, demonstrating how TypeScript enforces types and flags string assignments to number types to prevent errors.
Explore how object data types enforce a defined shape by revealing properties on hover and restricting keys like address, name, price, and bio to the object.
Explore array of objects in a NodeJS TypeScript project, examine data types, and learn how to assign values, hover over the billboard, and observe and overwrite.
Create a TypeScript function that takes a number and a base, returns their sum, and demonstrates type inference while addressing any usage and mixing number with screen types.
This lecture demonstrates using interfaces to replace messy objects with clear shapes, shows creating reusable components like I button, and defines functions that return computed results.
Learn how a class acts as the blueprint for creating projects and templates in JavaScript. Examine how the object in JavaScript uses a managed property method.
Explore object creation in JavaScript class syntax, using blueprints as templates to define objects with properties and methods, then instantiate a user object and inspect its id and name.
Define a class method in TypeScript that returns a string, name it sayHi, and demonstrate parameter handling and this binding with console.log.
Learn how to override methods in an inheritance setup, with the hero class and the boson class, and see what happens when they are overridden.
Explore type alias in TypeScript, compare it to interfaces, and learn its syntax by creating a button type with a name string and a number using the equal sign.
Explore union types in TypeScript by defining a type with a name string and a flag, then combining it with different shapes to allow multiple forms and catch mismatches.
Learn how TypeScript's intersection types merge multiple task properties into a single type, contrasting with union types, and verify it with tests along the way.
Learn how to use TypeScript tuples to represent object data in an array, fix type mismatches with a fixed-size string and number tuple, and define a type alias for reuse.
Explore interface inheritance by extending a base user interface to share username and password, add admin-specific fields with a boolean flag, and reduce duplication using the extend keyword.
Compare types and interfaces in TypeScript, showing how each describes the shape of an object, illustrates union and primitive types, and features a function returning string or number.
Learn how to use a TypeScript enum to constrain a user role in an interface, by defining roles such as user and admin and applying them to a user object.
Clone the GitHub project, rename the folder, open it in Visual Studio Code, install dependencies, and run npm install followed by npm run dev.
Set up an expressjs http server in node by creating server.ts, defining a server class, importing express, listening on port 5000, and wiring a JobApplication runner to start the server.
Resolve ESLint warnings by adjusting semicolon and quote settings, configure Prettier with a prettierrc, install the Prettier extension, and format code with the Prettier code formatter.
Set up format on save by selecting prettier as the default formatter in workspace and application settings, then save to auto format your code.
Set up private middleware, routes, and global error methods in the server, enforce the correct order (middleware, routes, global error), and expose a public start method.
Set up environment variables using dotenv, create and rename the .env file in the project, import it in the server, and verify the changes by running the server.
Set up controllers and router for the project, enable JSON middleware with app.use, define a user controller and routes, run the server, and verify the get all users works.
Set up Prisma ORM to configure a relational database for the job portal project, define a user model with name, email, password, role, and status, and run migrations.
Discover how Prisma client creates and retrieves data using a values object in a user controller. Name and email are required, and you can fetch an array of users.
Create a new column in an existing table using Prisma migrate, synchronize schema changes with the database, update the user model, and validate data during deployment.
Refactor code to apply the single responsibility principle by separating logic into controller, service, and repository, improving readability and maintainability.
Learn to set up http status constants and an error handling class for a NodeJS TypeScript job portal project, and explore client error responses and server status codes.
Identify and handle common errors in the user service by distinguishing customer errors from internal failures, displaying a generic 'something went wrong' message, and logging details for debugging.
Learn to validate the request body with Joi by defining a user schema (name, email, password) and using a validate function to surface errors.
Create a reusable middleware for schema validation, return structured error details, and map validation failures for fields like name, email, and password.
Master schema middleware in nodejs by ensuring you call the next function to produce a response.
Set up authentication features by creating a user controller and defining controller and service properties. Wire in routes and implement the sign up method to complete the auth controller setup.
Implement a sign-in workflow in a Node.js TypeScript project, validating email and password, using crypt.compare to check credentials, generating an access token, and wiring up authentication with Prisma.
Refactor code to send the asset token via cookie by creating cookie tables in globals and invoking the sendToken function to attach the asset token in the response cookies.
Write a verify user middleware that retrieves the access token from cookies, verifies it, and attaches the current user data to the request.
Discover how to implement logout by clearing cookies, handling token validation, and prompting users to log in again, while managing verified users and lock screen states.
Explore a simple middleware error handling approach for verified users and asset access, using log out and log in again to trigger and review errors and choose an approach.
Design the candidate profile model in prisma for a node js typescript job portal, establishing a one-to-one relation to the user via the user id.
Set up the folder structure for the job portal project by configuring the smart controller, service, route, and schema, then create a candidate profile in the controller.
Apply updates via the update controller and candidate profile service, using the update function with a where condition and data, extract the request body, verify user, and test with Postman.
Learn how to delete candidate profiles via a release controller in a NodeJS TypeScript job portal project, covering route setup, single-record removal with a where condition and service calls.
Fix entity types in the job portal project by defining an interface for candidate profiles and applying updates to the candidate data in code.
Explore a common get method pitfall in a Node.js TypeScript job portal app by implementing middleware to enforce admin, recruiter, or profile owner permissions before returning candidate data.
Refactor into a reusable function that handles multiple models, like candidate profiles and jobs, using closures with the chat function and streamlined data passing.
Implement the allowed access middleware to control permissions for profiles and requests, validating permission and returning forbidden when access is denied.
Implement an open to work boolean property in candidate profiles, update the controller to handle open to work requests, and expose update routes for recruiters.
Unlock the power of web development by focusing on the backend with "The Ultimate NodeJS TypeScript SQL - Job Portal Project." In this comprehensive course, you will learn how to build a scalable and efficient job portal from the ground up, concentrating on the server-side technologies that make modern web applications possible.
Starting with Node.js and TypeScript, you will dive deep into backend development, creating a robust API for managing job listings, applications, and user authentication. You'll harness the power of SQL databases for efficient data storage and retrieval, and use Prisma for seamless database interaction. Additionally, Redis will be utilized to optimize performance, implementing caching mechanisms that enhance the user experience.
By the end of this course, you will have a complete backend solution for a job portal, equipped with authentication, data management, and optimization techniques that are essential for any large-scale application.
This course is perfect for developers looking to strengthen their backend skills and gain hands-on experience with industry-standard tools and practices.
Why Learn SQL?
There are a lot of courses out there that teach you MongoDB (NoSQL), but in the real world, many companies use SQL. This course focuses on SQL, ensuring you are equipped with the skills that are in demand in the industry.
Problem-Solving Skills
One of the most effective ways to level up as a programmer is to "fix bugs and research" and many courses out there don't teach you that. I will do the opposite. I will guide you on how to "research and fix bugs" equipping you with the problem-solving skills essential for any professional developer.
Why Class?
As a backend developer, learning and mastering classes is crucial. Classes in TypeScript allow you to define object blueprints, enabling more structured and maintainable code. This course will cover the essential concepts of object-oriented programming (OOP) and how to effectively use classes to build scalable and reusable components in your applications.