Bird
Raised Fist0
Node.jsframework~5 mins

Routing requests manually in Node.js - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What does routing requests manually mean in Node.js?
It means writing code to check the URL and HTTP method of incoming requests and then deciding what response to send back, without using any routing libraries.
Click to reveal answer
beginner
Which Node.js module is commonly used to create a server for manual routing?
The built-in http module is used to create a server that listens for requests and allows manual routing by inspecting the request URL and method.
Click to reveal answer
beginner
How do you check the URL path of a request in manual routing?
You use req.url to get the path and then compare it with strings like '/' or '/about' to decide what to do.
Click to reveal answer
intermediate
Why is it important to check the HTTP method (GET, POST, etc.) in manual routing?
Because the same URL can have different actions depending on the method. For example, GET /users might fetch users, while POST /users might add a new user.
Click to reveal answer
beginner
What is a simple way to send a response back to the client in manual routing?
Use res.writeHead() to set status and headers, then res.end() to send the response body and finish the request.
Click to reveal answer
Which Node.js property holds the URL path of an incoming request?
Ares.path
Bres.url
Creq.path
Dreq.url
What Node.js module do you use to create a server for manual routing?
Apath
Bfs
Chttp
Durl
Why check the HTTP method in routing?
ATo know what action to perform for the same URL
BTo get the client's IP address
CTo set cookies
DTo close the connection
Which method sends the response body and ends the response?
Ares.end()
Bres.write()
Cres.send()
Dres.close()
What is the first step in manual routing inside the server callback?
ASend a response immediately
BCheck <code>req.url</code> and <code>req.method</code>
CClose the server
DImport a routing library
Explain how you would handle a GET request to '/' and a POST request to '/submit' manually in Node.js.
Think about checking URL and method inside the server callback.
You got /4 concepts.
    Describe why manual routing might be harder than using a routing library and when it could still be useful.
    Consider pros and cons of manual vs library routing.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of checking req.url in a Node.js server without frameworks?
      easy
      A. To decide how to respond to different request paths
      B. To parse the request body automatically
      C. To connect to a database
      D. To handle user authentication

      Solution

      1. Step 1: Understand the role of req.url

        req.url contains the path requested by the client, like '/home' or '/about'.
      2. Step 2: Purpose of checking req.url

        By checking req.url, the server can decide which content or response to send back.
      3. Final Answer:

        To decide how to respond to different request paths -> Option A
      4. Quick Check:

        Routing = Check req.url [OK]
      Hint: Check req.url to route requests manually [OK]
      Common Mistakes:
      • Thinking req.url parses request body
      • Confusing req.url with database connection
      • Assuming req.url handles authentication
      2. Which of the following is the correct way to send a plain text response with status 200 in a manual Node.js server?
      easy
      A. res.status(200).send('Hello');
      B. res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello');
      C. res.sendStatus(200).send('Hello');
      D. res.write(200, 'Hello');

      Solution

      1. Step 1: Identify correct methods for manual response

        In manual Node.js servers, res.writeHead() sets status and headers, res.end() sends the response body.
      2. Step 2: Check each option

        res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello'); uses writeHead and end correctly. The second and third options use Express methods, not native Node.js. res.write(200, 'Hello'); is invalid syntax.
      3. Final Answer:

        res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello'); -> Option B
      4. Quick Check:

        Manual response = writeHead + end [OK]
      Hint: Use writeHead and end to send manual responses [OK]
      Common Mistakes:
      • Using Express methods in plain Node.js
      • Calling res.write without headers
      • Incorrect method names like res.sendStatus
      3. What will the following Node.js server code output when a client requests /hello?
      const http = require('http');
      const server = http.createServer((req, res) => {
        if (req.url === '/hello') {
          res.writeHead(200, {'Content-Type': 'text/plain'});
          res.end('Hello World');
        } else {
          res.writeHead(404);
          res.end('Not Found');
        }
      });
      server.listen(3000);
      medium
      A. Error: Cannot read property 'writeHead' of undefined
      B. Not Found
      C. Hello World
      D. Server crashes

      Solution

      1. Step 1: Check the request URL condition

        The code checks if req.url === '/hello'. If true, it sends 'Hello World' with status 200.
      2. Step 2: Determine output for '/hello'

        Since the request is '/hello', the first branch runs, sending 'Hello World'.
      3. Final Answer:

        Hello World -> Option C
      4. Quick Check:

        req.url '/hello' = 'Hello World' [OK]
      Hint: Match req.url exactly to send correct response [OK]
      Common Mistakes:
      • Assuming default response is 'Hello World'
      • Confusing 404 and 200 responses
      • Expecting server error without syntax issues
      4. Identify the error in this manual routing code snippet:
      const http = require('http');
      const server = http.createServer((req, res) => {
        if (req.url = '/test') {
          res.writeHead(200, {'Content-Type': 'text/plain'});
          res.end('Test page');
        } else {
          res.writeHead(404);
          res.end('Page not found');
        }
      });
      server.listen(3000);
      medium
      A. Missing res.end() call
      B. server.listen() missing port number
      C. Incorrect header format in writeHead
      D. Using assignment (=) instead of comparison (===) in if condition

      Solution

      1. Step 1: Check the if condition syntax

        The condition uses req.url = '/test', which assigns instead of compares. This always evaluates to true.
      2. Step 2: Identify correct comparison operator

        It should be req.url === '/test' to compare values properly.
      3. Final Answer:

        Using assignment (=) instead of comparison (===) in if condition -> Option D
      4. Quick Check:

        Use === for comparison, not = [OK]
      Hint: Use === for comparison, not = [OK]
      Common Mistakes:
      • Confusing assignment and comparison operators
      • Forgetting to call res.end()
      • Incorrect header object syntax
      5. You want to manually route requests to serve JSON data at /data and plain text at /info. Which code snippet correctly implements this?
      hard
      A. if (req.url === '/data') { res.writeHead(200, {'Content-Type': 'application/json'}); res.end(JSON.stringify({name: 'Node'})); } else if (req.url === '/info') { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Information'); } else { res.writeHead(404); res.end('Not Found'); }
      B. if (req.url === '/data') { res.end({name: 'Node'}); } else if (req.url === '/info') { res.end('Information'); } else { res.end('Not Found'); }
      C. if (req.url === '/data') { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('{"name":"Node"}'); } else if (req.url === '/info') { res.writeHead(200, {'Content-Type': 'application/json'}); res.end('Information'); } else { res.writeHead(404); res.end('Not Found'); }
      D. if (req.url === '/data') { res.writeHead(404); res.end('Not Found'); } else if (req.url === '/info') { res.writeHead(200); res.end('Information'); }

      Solution

      1. Step 1: Check content types for each route

        For /data, JSON content type 'application/json' is correct. For /info, plain text 'text/plain' is correct.
      2. Step 2: Verify response body and headers

        if (req.url === '/data') { res.writeHead(200, {'Content-Type': 'application/json'}); res.end(JSON.stringify({name: 'Node'})); } else if (req.url === '/info') { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Information'); } else { res.writeHead(404); res.end('Not Found'); } sets correct headers and uses JSON.stringify for JSON data. Other options misuse content types or omit headers.
      3. Final Answer:

        correctly sets headers and responses for both routes -> Option A
      4. Quick Check:

        Set correct Content-Type and stringify JSON [OK]
      Hint: Set Content-Type and stringify JSON for JSON responses [OK]
      Common Mistakes:
      • Sending JSON object directly without stringify
      • Mixing content types for routes
      • Omitting status codes or headers