Bird
Raised Fist0
NextJSframework~5 mins

Catch-all API routes in NextJS - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a catch-all API route in Next.js?
A catch-all API route is a special route that matches all paths under a specific folder, capturing multiple URL segments as an array. It lets you handle dynamic and nested API paths with one file.
Click to reveal answer
beginner
How do you define a catch-all API route file in Next.js?
You create a file named [...param].js (or .ts) inside the /app/api or /pages/api folder. The square brackets with three dots tell Next.js to capture all matching path segments into an array called 'param'.
Click to reveal answer
intermediate
What is the difference between a catch-all route and an optional catch-all route?
A catch-all route uses [...param].js and requires at least one path segment. An optional catch-all route uses [[...param]].js and matches zero or more segments, so it also matches the base path without extra segments.
Click to reveal answer
beginner
How do you access the captured path segments inside a catch-all API route handler?
Inside the API route handler, you get the segments from the request's params object, for example, params.param, which is an array of strings representing each path segment matched by the catch-all route.
Click to reveal answer
intermediate
Why use catch-all API routes instead of many separate API files?
Catch-all routes let you handle many related API paths with one file, reducing code duplication and making it easier to manage nested or dynamic routes in a clean way.
Click to reveal answer
Which file name defines a catch-all API route in Next.js?
A[slug].js
B[[...slug]].js
Cslug.js
D[...slug].js
What type of value does the catch-all route parameter provide inside the API handler?
AA string
BAn array of strings
CA number
DAn object
What does an optional catch-all route ([[...param]].js) allow that a normal catch-all ([...param].js) does not?
AMatching only numeric segments
BMatching only one path segment
CMatching zero or more path segments
DMatching only the root path
Where do you place catch-all API route files in a Next.js project using the App Router?
A/app/api/
B/pages/api/
C/public/api/
D/components/api/
Why might you choose a catch-all API route over multiple specific routes?
ATo handle many nested paths with one file
BTo improve CSS styling
CTo avoid using React components
DTo disable API routes
Explain how to create and use a catch-all API route in Next.js and how the parameters are accessed.
Think about the special file naming and how Next.js passes URL parts to your code.
You got /3 concepts.
    Describe the difference between a catch-all and an optional catch-all API route in Next.js.
    Focus on how many path segments each route type matches.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does a catch-all API route file named [...slug].js in Next.js do?
      easy
      A. It catches all URL paths that match and provides the parts as an array in req.query.slug.
      B. It only catches the root API path and ignores nested paths.
      C. It catches only one specific URL path exactly matching slug.
      D. It disables all API routes in the folder.

      Solution

      1. Step 1: Understand catch-all route naming

        In Next.js, files named with [...name].js catch all nested paths under that route.
      2. Step 2: Check how parameters are passed

        The parts of the URL matched are passed as an array in req.query.name, here slug.
      3. Final Answer:

        It catches all URL paths that match and provides the parts as an array in req.query.slug. -> Option A
      4. Quick Check:

        Catch-all route = array in req.query [OK]
      Hint: Catch-all uses [...name].js and returns array in req.query[name] [OK]
      Common Mistakes:
      • Thinking it catches only one path instead of many
      • Expecting a string instead of an array in req.query
      • Confusing catch-all with optional catch-all routes
      2. Which of the following is the correct filename for a catch-all API route in Next.js?
      easy
      A. [slug].js
      B. [...slug].js
      C. slug.js
      D. [slug...].js

      Solution

      1. Step 1: Recall catch-all route syntax

        Catch-all routes use three dots inside square brackets before the name, like [...slug].js.
      2. Step 2: Compare options

        Only [...slug].js matches the correct syntax for catch-all routes.
      3. Final Answer:

        [...slug].js -> Option B
      4. Quick Check:

        Catch-all filename = [...name].js [OK]
      Hint: Catch-all filenames always have three dots inside brackets [OK]
      Common Mistakes:
      • Using single brackets without dots for catch-all
      • Placing dots outside brackets
      • Missing brackets entirely
      3. Given a catch-all API route file pages/api/[...params].js with this handler:
      export default function handler(req, res) {
        res.json(req.query.params);
      }

      What will be the JSON response for a request to /api/a/b/c?
      medium
      A. "a/b/c"
      B. {"params": "a/b/c"}
      C. ["a", "b", "c"]
      D. null

      Solution

      1. Step 1: Understand catch-all parameter passing

        The catch-all [...params] captures all path parts as an array in req.query.params.
      2. Step 2: Check the handler response

        The handler returns req.query.params as JSON, so the response is the array of parts.
      3. Final Answer:

        ["a", "b", "c"] -> Option C
      4. Quick Check:

        Catch-all returns array of path parts [OK]
      Hint: Catch-all returns array of URL parts in req.query [OK]
      Common Mistakes:
      • Expecting a string instead of an array
      • Confusing JSON structure returned
      • Not recognizing catch-all returns array
      4. You wrote a catch-all API route pages/api/[...slug].js but when you request /api (no extra path), you get an error. What is the likely cause?
      medium
      A. You forgot to export the handler function.
      B. The file name is incorrect; it should be [slug].js.
      C. API routes cannot have dynamic segments.
      D. Catch-all routes require at least one path segment; use optional catch-all [[...slug]].js instead.

      Solution

      1. Step 1: Understand catch-all vs optional catch-all

        Catch-all [...slug].js requires at least one path part; it does not match the base path alone.
      2. Step 2: Identify fix for base path requests

        To handle base path /api with no extra parts, use optional catch-all [[...slug]].js.
      3. Final Answer:

        Catch-all routes require at least one path segment; use optional catch-all [[...slug]].js instead. -> Option D
      4. Quick Check:

        Catch-all needs path parts; optional catch-all handles empty [OK]
      Hint: Use [[...name]].js for optional catch-all including empty path [OK]
      Common Mistakes:
      • Expecting catch-all to match empty path
      • Misnaming the file without brackets
      • Ignoring export of handler function
      5. You want to create a catch-all API route that returns a JSON object with keys for each path part and their index, for example, for /api/a/b/c it returns {"0": "a", "1": "b", "2": "c"}. Which handler code inside pages/api/[...parts].js achieves this?
      hard
      A. export default function handler(req, res) { const obj = {}; req.query.parts.forEach((p, i) => { obj[i] = p; }); res.json(obj); }
      B. export default function handler(req, res) { res.json(req.query.parts.join(',')); }
      C. export default function handler(req, res) { res.json({ parts: req.query.parts }); }
      D. export default function handler(req, res) { res.json(req.query.parts.length); }

      Solution

      1. Step 1: Understand the input and desired output

        The catch-all parameter parts is an array of path parts. We want to create an object with keys as indices and values as parts.
      2. Step 2: Check which code builds the object correctly

        export default function handler(req, res) { const obj = {}; req.query.parts.forEach((p, i) => { obj[i] = p; }); res.json(obj); } loops over req.query.parts and assigns each part to the object with its index as key, then returns it as JSON.
      3. Final Answer:

        export default function handler(req, res) { const obj = {}; req.query.parts.forEach((p, i) => { obj[i] = p; }); res.json(obj); } -> Option A
      4. Quick Check:

        Loop parts to object with index keys = export default function handler(req, res) { const obj = {}; req.query.parts.forEach((p, i) => { obj[i] = p; }); res.json(obj); } [OK]
      Hint: Use forEach to map array parts to object keys [OK]
      Common Mistakes:
      • Returning array or string instead of object
      • Not looping to create object keys
      • Returning length instead of parts
      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