Request & Response in expressjs
basic · Express.js — Web APIs & middleware
Request and Response: The Communication Theory 1. The Anatomy of a Request ( req ) Theory: The req object represents the HTTP request and contains all the data coming from the client . req.body : Used primarily in POST and PUT requests to carry data (like a user's registration details) . req.params : Used to capture dynamic values from the URL path (e.g., in /users/:id , the :id is a param) . req.query : Used for optional parameters often found after a ? in the URL (e.g., /search?term=javascript ) . req.headers : Contains metadata about the request, such as the content-type or authorization tokens . 2. The Anatomy of a Response ( res ) Theory: The res object is used to send data back to the client and terminate the Request-Response cycle . res.status() : Sets the HTTP status code (e.g., 201 for a successful creation) . res.json() : Sends a JSON response. This is the standard for MERN stack applications . res.send() : Sends a basic string or HTML response . Understanding the interaction between Requests and Responses is fundamental to mastering Express. This cycle represents the entire conversation between your React frontend and your Node.js backend . 3. The Lifecycle and Essential Middleware Theory: Between the Request and the Response lies a "Pipeline" of execution . For this pipeline to work, specific configurations are required: Body Parsing Theory: By default, Node.js sees incoming data as a raw stream of bytes . The Process: app.use(express.json()) acts as a translator that converts that stream into a JavaScript object you can access via req.body . CORS (Cross-Origin Resource Sharing) Theory: For security, browsers prevent a website on one domain (e.g., your React app on localhost:3000 ) from talking to a server on another (e.g., your API on localhost:5000 ) . The Fix: The cors() middleware adds specific headers to the response that tell the browser, "It’s okay to allow this React app to access my data" . Params /users/123 req.params.id To identify a specific resource . Query /users?role=admin req.query.role To filter, sort, or paginate data . 5. HTTP Status Codes (The "Result" Theory) Theory: Status codes provide an instant summary of the request's outcome without the client needing to read the entire message body . 2xx (Success): Everything went well. 201 is specifically for successful creation . 4xx (Client Error): The user did something wrong. 401 means they aren't logged in; 403 means they are logged in but don't have permission for that specific action . 5xx (Server Error): Your code crashed or the database is down . // Example implementation in a Controller app.get('/users/:id', (req, res) => { const userId = req.params.id; // Identification (Params) const detailLevel = req.query.detail; // Filtering (Query) if (!userId) { return res.status(400).json({ message: "ID is required" }); // Client Error } res.status(200).json({ id: userId, type: detailLevel }); // Success });