Bird
Raised Fist0
NestJSframework~5 mins

Functional middleware in NestJS - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is functional middleware in NestJS?
Functional middleware in NestJS is a simple function that takes a request, response, and next callback to process HTTP requests before they reach route handlers.
Click to reveal answer
beginner
How do you define a functional middleware in NestJS?
You define it as a function with parameters (req, res, next) where you can modify the request or response, then call next() to pass control to the next middleware or route handler.
Click to reveal answer
intermediate
How do you apply functional middleware to routes in NestJS?
You apply functional middleware inside the configure() method of a module by using the MiddlewareConsumer's apply() method and specifying the routes with forRoutes().
Click to reveal answer
beginner
What is the role of the next() function in functional middleware?
The next() function passes control to the next middleware or route handler. Without calling next(), the request will not continue and may hang.
Click to reveal answer
intermediate
Can functional middleware in NestJS be asynchronous? How?
Yes, functional middleware can be asynchronous by returning a Promise or using async/await syntax. You must still call next() after async operations complete.
Click to reveal answer
What parameters does a functional middleware function in NestJS receive?
Areq, res, next
Brequest, response, handler
Creq, res, handler
Drequest, response, nextHandler
Where do you apply functional middleware in a NestJS application?
AInside the service classes
BInside the main.ts bootstrap file
CInside the configure() method of a module
DInside the controller methods
What happens if you forget to call next() in functional middleware?
AThe request will hang and not proceed
BThe request will automatically continue
CAn error is thrown immediately
DThe response is sent automatically
Can functional middleware modify the request object?
AOnly the response can be modified
BYes, it can add or change properties on req
CNo, req is read-only
DMiddleware cannot access req
How do you specify which routes a functional middleware applies to?
ABy placing middleware inside the controller
BBy decorating the middleware function
CBy naming the middleware after the route
DUsing forRoutes() method on MiddlewareConsumer
Explain how to create and apply a functional middleware in NestJS.
Think about the middleware function signature and where it is registered.
You got /5 concepts.
    Describe the importance of calling next() in functional middleware and what happens if you don't.
    Consider the flow of request processing.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of functional middleware in NestJS?
      easy
      A. To run code before the route handler to modify requests or add features
      B. To define database models for the application
      C. To create UI components for the frontend
      D. To compile TypeScript code into JavaScript

      Solution

      1. Step 1: Understand middleware role

        Middleware runs before route handlers to process requests or add features like logging or authentication.
      2. Step 2: Identify correct purpose

        Options A, B, and D relate to other parts of development, not middleware.
      3. Final Answer:

        To run code before the route handler to modify requests or add features -> Option A
      4. Quick Check:

        Middleware runs before routes = C [OK]
      Hint: Middleware runs before routes to add features [OK]
      Common Mistakes:
      • Confusing middleware with database models
      • Thinking middleware creates UI components
      • Believing middleware compiles code
      2. Which of the following is the correct way to define a functional middleware in NestJS?
      easy
      A. function logger(req, res) { console.log(req.url); }
      B. class Logger { log(req, res) { console.log(req.url); } }
      C. const logger = () => { console.log('log'); }
      D. function logger(req, res, next) { console.log(req.url); next(); }

      Solution

      1. Step 1: Check middleware signature

        Functional middleware must accept (req, res, next) and call next() to continue.
      2. Step 2: Validate options

        function logger(req, res, next) { console.log(req.url); next(); } matches this pattern. class Logger { log(req, res) { console.log(req.url); } } is a class, not functional middleware. const logger = () => { console.log('log'); } lacks parameters and next call. function logger(req, res) { console.log(req.url); } misses next parameter and call.
      3. Final Answer:

        function logger(req, res, next) { console.log(req.url); next(); } -> Option D
      4. Quick Check:

        Middleware needs (req, res, next) and calls next() [OK]
      Hint: Middleware needs (req, res, next) and calls next() [OK]
      Common Mistakes:
      • Omitting the next parameter
      • Not calling next() inside middleware
      • Using class instead of function for functional middleware
      3. Given this middleware code, what will be logged when a request to '/home' is made?
      function logger(req, res, next) {
        console.log('Request URL:', req.url);
        next();
      }
      medium
      A. Request URL: undefined
      B. Request URL: /home
      C. No output because next() stops logging
      D. Error: req.url is not defined

      Solution

      1. Step 1: Understand req.url property

        In middleware, req.url contains the path of the incoming request, here '/home'.
      2. Step 2: Analyze console.log output

        The middleware logs 'Request URL:' followed by req.url, so it prints 'Request URL: /home'.
      3. Final Answer:

        Request URL: /home -> Option B
      4. Quick Check:

        req.url logs request path = A [OK]
      Hint: req.url holds the request path string [OK]
      Common Mistakes:
      • Assuming next() stops console.log
      • Thinking req.url is undefined
      • Confusing middleware with route handler output
      4. Identify the error in this functional middleware code:
      function auth(req, res, next) {
        if (!req.headers.authorization) {
          res.status(401).send('Unauthorized');
        }
        next();
      }
      medium
      A. res.status should be res.sendStatus
      B. Missing req parameter in function signature
      C. next() is called even after sending response, causing errors
      D. Authorization header check is incorrect

      Solution

      1. Step 1: Analyze flow after sending response

        If authorization header is missing, response is sent with 401, but next() is still called, which can cause errors by continuing the request cycle.
      2. Step 2: Identify correct fix

        To fix, add return before res.status(401).send(...) to stop execution or call next() only if authorized.
      3. Final Answer:

        next() is called even after sending response, causing errors -> Option C
      4. Quick Check:

        Call next() only if no response sent [OK]
      Hint: Don't call next() after sending response [OK]
      Common Mistakes:
      • Calling next() after res.send causes errors
      • Forgetting to stop middleware after response
      • Misusing res.status vs res.sendStatus
      5. You want to create a functional middleware that adds a custom header 'X-App-Version' with value '1.0' to every response. Which code correctly implements this?
      hard
      A. function addVersion(req, res, next) { res.setHeader('X-App-Version', '1.0'); next(); }
      B. function addVersion(req, res) { res.setHeader('X-App-Version', '1.0'); }
      C. function addVersion(req, res, next) { next(); res.setHeader('X-App-Version', '1.0'); }
      D. function addVersion(req, res, next) { req.setHeader('X-App-Version', '1.0'); next(); }

      Solution

      1. Step 1: Confirm middleware signature and header setting

        Middleware must accept (req, res, next) and call next() after setting headers. res.setHeader is correct method.
      2. Step 2: Evaluate options

        function addVersion(req, res, next) { res.setHeader('X-App-Version', '1.0'); next(); } sets header then calls next() correctly. function addVersion(req, res) { res.setHeader('X-App-Version', '1.0'); } misses next parameter and call. function addVersion(req, res, next) { next(); res.setHeader('X-App-Version', '1.0'); } calls next() before setting header, so header may not be sent. function addVersion(req, res, next) { req.setHeader('X-App-Version', '1.0'); next(); } uses req.setHeader which is incorrect because req cannot set response headers.
      3. Final Answer:

        function addVersion(req, res, next) { res.setHeader('X-App-Version', '1.0'); next(); } -> Option A
      4. Quick Check:

        Set header before next() with correct method [OK]
      Hint: Set header before next() using res.setHeader [OK]
      Common Mistakes:
      • Calling next() before setting headers
      • Omitting next parameter or call
      • Confusing req and res when setting headers
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard