An access token is a short-lived, temporary credential used to access protected resources on behalf of an authenticated user. It is like a key that allows the client to make authorized requests to the resource server
Lifespan:Access tokens have a relatively short lifespan, typically lasting from minutes to a few hours, depending on the system's configuration.
Usage:When a user logs in and authorizes the client application, it receives an access token. This token is included in the HTTP headers of requests to the resource server. The resource server validates the token and grants or denies access accordingly.
Access Tokens: Access tokens are sensitive and must be protected. It is recommended to store them securely and avoid exposing them in client-side code (e.g., JavaScript). Common methods for storing access tokens include:
A refresh token is a long-lived credential used to obtain new access tokens without requiring the user to re-enter their credentials. It enhances security by reducing the frequency with which users need to authenticate.
Lifespan: Refresh tokens have a longer lifespan compared to access tokens, often measured in days or weeks.
Usage: When an access token expires, the client can use a refresh token to request a new access token from the authorization server. This process is called token refresh. It doesn't require the user to re-enter their credentials.
Refresh Tokens: Refresh tokens are even more sensitive and should be stored securely. It's often recommended to store them on the server-side. If you must store them on the client-side:
Express.js, often referred to simply as Express, is a popular and minimalistic web application framework for Node.js. It provides a robust set of features for building web and mobile applications, as well as APIs. Express is known for its simplicity, flexibility, and ease of use, making it a top choice for many developers when creating server-side applications.
Routing:Express simplifies the process of defining and handling routes, making it easy to respond to HTTP requests. You can define routes for various HTTP methods (e.g., GET, POST, PUT, DELETE) and specify how your application should respond to requests at specific endpoints. Here's a basic example:
Middleware:Middleware functions are a fundamental concept in Express. They are functions that have access to the request and response objects and can perform tasks like logging, authentication, validation, and more. Middleware functions can be added to the request handling pipeline using app.use() or associated with specific routes. This allows you to modularize and organize your application's functionality effectively.
In summary, Express.js is a versatile and powerful framework for building web applications and APIs with Node.js. Its simplicity and flexibility, along with its rich ecosystem and active community, make it a top choice for many developers seeking to create server-side applications. Whether you're building a small web application or a complex API, Express can streamline the development process and help you create efficient and maintainable code.
NestJS is a popular and powerful Node.js framework for building scalable and maintainable server-side applications. It is often described as a progressive, full-stack framework because it combines elements of both the front-end and back-end development, and it's designed to make it easier to build enterprise-grade applications. Here's an elaborate explanation of NestJS:
In summary, NestJS is a full-featured Node.js framework that combines the benefits of TypeScript, modularity, and a well-defined structure to make it easier to build complex, scalable, and maintainable server-side applications. Whether you are building RESTful APIs, real-time applications, microservices, or anything in between, NestJS provides a solid foundation for your project. It is a powerful choice for developers who prefer a structured and maintainable approach to application development.
Data Fetching with useEffect:I use the useEffect hook to fetch data from My server using the fetch API. There are two useEffect blocks. The first one fetches categories from https://hire-harbor-server.vercel.app/category and updates the categories state when the data is received. The second one fetches jobs from https://hire-harbor-server.vercel.app/jobs and updates the jobs state.
Pagination:I implement a simple pagination system with Prev and Next buttons to navigate through the pages of jobs. The currentPage state is used to determine which jobs to display. The number of pages is calculated based on the number of jobs and items per page, and buttons are generated accordingly.
Search Functionality:Users can enter search queries in the input field, and when they click Search the handleSearch function filters the job data based on the query. Search results are displayed in the table.