Bird
Raised Fist0
NextJSframework~5 mins

Request modification in NextJS - 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 is request modification in Next.js?
Request modification means changing the details of an HTTP request before it reaches your server or API route. In Next.js, this can be done using middleware to inspect and alter requests.
Click to reveal answer
intermediate
How do you modify a request URL in Next.js middleware?
You can use the NextResponse.rewrite() method inside middleware to change the request URL, redirecting it to a different path or resource before it reaches the handler.
Click to reveal answer
beginner
Which Next.js feature allows you to run code before a request is completed to modify it?
Middleware in Next.js runs before the request completes and lets you modify the request or response, such as rewriting URLs, adding headers, or redirecting.
Click to reveal answer
intermediate
What is the difference between NextResponse.rewrite() and NextResponse.redirect() in request modification?
NextResponse.rewrite() changes the request URL internally without changing the browser's address bar, while NextResponse.redirect() sends a redirect response that changes the browser's URL.
Click to reveal answer
advanced
Can you modify request headers in Next.js middleware? How?
Yes, you can clone the request and set new headers or modify existing ones inside middleware before passing it on. This helps add authentication tokens or custom data.
Click to reveal answer
Which Next.js feature lets you modify requests before they reach your API or page?
AgetServerSideProps
BMiddleware
CStatic Generation
DClient Components
What does NextResponse.rewrite() do in Next.js middleware?
ARedirects the browser to a new URL
BModifies response headers
CBlocks the request
DChanges the request URL internally without changing the browser URL
How can you add a custom header to a request in Next.js middleware?
AClone the request and set headers on the clone
BUse getStaticProps
CModify the request object directly
DUse client-side JavaScript
Which method sends a response that changes the browser's URL in Next.js middleware?
ANextResponse.redirect()
BNextResponse.json()
CNextResponse.next()
DNextResponse.rewrite()
Where do you place middleware files in a Next.js project?
Acomponents/
Bpages/api/
Cmiddleware.js or middleware.ts (at project root)
Dpublic/
Explain how you can modify an incoming request URL in Next.js using middleware.
Think about how middleware can change the path without redirecting.
You got /4 concepts.
    Describe the difference between rewriting and redirecting a request in Next.js middleware.
    Consider what the user sees in the browser address bar.
    You got /4 concepts.

      Practice

      (1/5)
      1. In Next.js, what is the main purpose of modifying a request in middleware?
      easy
      A. To change request details like headers or body before the app processes it
      B. To directly send a response to the client without processing
      C. To update the database with request data
      D. To log request details only without changing anything

      Solution

      1. Step 1: Understand middleware role in Next.js

        Middleware runs before the app processes a request, allowing changes to the request.
      2. Step 2: Identify what request modification means

        Modifying means changing headers, body, or other request parts before the app sees it.
      3. Final Answer:

        To change request details like headers or body before the app processes it -> Option A
      4. Quick Check:

        Request modification = change request details [OK]
      Hint: Middleware changes requests before app sees them [OK]
      Common Mistakes:
      • Confusing request modification with sending responses
      • Thinking middleware updates databases directly
      • Assuming middleware only logs requests
      2. Which of the following is the correct way to return a modified request in Next.js middleware?
      easy
      A. return NextResponse.next(request);
      B. return NextResponse.next(new Request(request));
      C. return NextResponse.redirect('/new-path');
      D. return NextResponse.next(new Request(request, { headers: { 'x-new': 'value' } }));

      Solution

      1. Step 1: Understand how to modify requests in Next.js middleware

        You must create a new Request object with changes (like new headers) and pass it to NextResponse.next().
      2. Step 2: Check each option

        return NextResponse.next(request); passes original request without changes. return NextResponse.next(new Request(request)); creates a new Request but without changes. return NextResponse.next(new Request(request, { headers: { 'x-new': 'value' } })); creates a new Request with modified headers correctly. return NextResponse.redirect('/new-path'); redirects instead of modifying request.
      3. Final Answer:

        return NextResponse.next(new Request(request, { headers: { 'x-new': 'value' } })); -> Option D
      4. Quick Check:

        New Request with changes + NextResponse.next() = D [OK]
      Hint: Wrap new Request with changes inside NextResponse.next() [OK]
      Common Mistakes:
      • Returning original request without changes
      • Using redirect instead of next() for modification
      • Not creating a new Request object for changes
      3. Given this middleware code snippet, what will be the value of the header 'x-user' in the request seen by the app?
      import { NextResponse } from 'next/server';
      export function middleware(request) {
        const newHeaders = new Headers(request.headers);
        newHeaders.set('x-user', 'alice');
        const newRequest = new Request(request.url, { headers: newHeaders });
        return NextResponse.next(newRequest);
      }
      medium
      A. null
      B. undefined
      C. alice
      D. original header value if any

      Solution

      1. Step 1: Analyze header modification in middleware

        The code creates new headers from the original, sets 'x-user' to 'alice', then creates a new Request with these headers.
      2. Step 2: Determine header value passed to app

        The app receives the new Request with 'x-user' header set to 'alice', so the value is 'alice'.
      3. Final Answer:

        alice -> Option C
      4. Quick Check:

        Header 'x-user' set to 'alice' in new Request [OK]
      Hint: Headers set in new Request appear in app request [OK]
      Common Mistakes:
      • Assuming original headers remain unchanged
      • Thinking header is removed or null
      • Confusing middleware response headers with request headers
      4. Identify the error in this Next.js middleware code that tries to add a custom header:
      import { NextResponse } from 'next/server';
      export function middleware(request) {
        request.headers.set('x-custom', '123');
        return NextResponse.next(request);
      }
      medium
      A. Headers are immutable; cannot modify request.headers directly
      B. NextResponse.next() cannot accept a Request object
      C. Missing await keyword for asynchronous header setting
      D. Middleware must return a Response, not NextResponse

      Solution

      1. Step 1: Check how headers can be modified in Next.js middleware

        Request headers are immutable; you cannot change them directly on the original request object.
      2. Step 2: Identify correct way to modify headers

        You must create a new Headers object, modify it, then create a new Request with those headers.
      3. Final Answer:

        Headers are immutable; cannot modify request.headers directly -> Option A
      4. Quick Check:

        Request.headers immutable = B [OK]
      Hint: Request.headers are read-only; create new Headers to modify [OK]
      Common Mistakes:
      • Trying to set headers directly on request.headers
      • Assuming NextResponse.next() rejects Request objects
      • Confusing async code requirement for headers
      5. You want to add a custom header 'x-trace-id' with a unique value to every request in Next.js middleware, but only if the header is not already present. Which code snippet correctly implements this?
      hard
      A. import { NextResponse } from 'next/server'; export function middleware(request) { const headers = request.headers; if (!headers.has('x-trace-id')) { headers.set('x-trace-id', crypto.randomUUID()); } return NextResponse.next(request); }
      B. import { NextResponse } from 'next/server'; export function middleware(request) { if (!request.headers.has('x-trace-id')) { const headers = new Headers(request.headers); headers.set('x-trace-id', crypto.randomUUID()); const newRequest = new Request(request.url, { headers }); return NextResponse.next(newRequest); } return NextResponse.next(); }
      C. import { NextResponse } from 'next/server'; export function middleware(request) { const newRequest = new Request(request.url, { headers: { 'x-trace-id': crypto.randomUUID() } }); return NextResponse.next(newRequest); }
      D. import { NextResponse } from 'next/server'; export function middleware(request) { const headers = new Headers(); headers.set('x-trace-id', crypto.randomUUID()); const newRequest = new Request(request.url, { headers }); return NextResponse.next(newRequest); }

      Solution

      1. Step 1: Identify the correct conditional logic and immutable handling

        Check !request.headers.has('x-trace-id'), then const headers = new Headers(request.headers); headers.set('x-trace-id', crypto.randomUUID()); const newRequest = new Request(request.url, { headers }); return NextResponse.next(newRequest); else return NextResponse.next().
      2. Step 2: Why it works

        Clones headers immutably, adds conditionally if missing, preserves other headers, forwards new request or original.
      3. Step 3: Why others fail

        Direct set on request.headers throws immutable error. new Request with { headers: { 'x-trace-id': ... } } replaces all headers. new Headers() starts empty, loses original headers.
      4. Final Answer:

        import { NextResponse } from 'next/server'; export function middleware(request) { if (!request.headers.has('x-trace-id')) { const headers = new Headers(request.headers); headers.set('x-trace-id', crypto.randomUUID()); const newRequest = new Request(request.url, { headers }); return NextResponse.next(newRequest); } return NextResponse.next(); } -> Option B
      5. Quick Check:

        Check header, clone headers, set new, return new Request = A [OK]
      Hint: Clone headers, check presence, set if missing, return new Request [OK]
      Common Mistakes:
      • Modifying request.headers directly
      • Overwriting all headers instead of cloning
      • Not checking if header already exists