Bird
Raised Fist0
Expressframework~5 mins

app.all and app.use for catch-all in Express - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does app.all do in Express?

app.all matches all HTTP methods (GET, POST, PUT, DELETE, etc.) for a specific route path.

It is useful when you want the same handler for all request types on that path.

Click to reveal answer
beginner
How does app.use differ from app.all in Express?

app.use is used to mount middleware functions that run for all HTTP methods and paths that start with the given path.

It is often used for middleware like logging, authentication, or catch-all routes.

Click to reveal answer
intermediate
How can app.all be used as a catch-all route?

By using app.all('*', handler), you can catch all requests to any path and any HTTP method that were not matched earlier.

This is useful for 404 pages or default responses.

Click to reveal answer
intermediate
What is the common use of app.use as a catch-all in Express?

Using app.use((req, res) => { ... }) without a path catches all requests not handled by previous routes.

This is often used to send a 404 response or handle errors.

Click to reveal answer
beginner
Which method should you place last in your Express app to handle unmatched routes?

You should place either app.all('*', handler) or app.use((req, res) => { ... }) at the end of your route definitions.

This ensures all unmatched requests are caught and handled properly.

Click to reveal answer
What does app.all('/path', handler) do in Express?
AHandles all HTTP methods for '/path'
BHandles only GET requests for '/path'
CHandles all paths for GET requests
DMounts middleware for all paths
Which Express method is best to use for middleware that runs on every request regardless of path?
Aapp.post()
Bapp.all()
Capp.get()
Dapp.use()
How do you create a catch-all route for unmatched requests using app.all?
Aapp.all('/', handler)
Bapp.all('*', handler)
Capp.all('', handler)
Dapp.all('/catch', handler)
What happens if you place app.use middleware before route handlers?
AIt only runs after routes
BIt will never run
CIt runs before the routes and can modify requests
DIt causes an error
Which is a good use case for app.use((req, res) => { res.status(404).send('Not found') })?
AHandling unmatched routes with 404
BLogging requests
CServing static files
DParsing JSON bodies
Explain how app.all and app.use can be used to catch all unmatched routes in an Express app.
Think about how Express matches routes and middleware in order.
You got /5 concepts.
    Describe the difference between app.all and app.use in Express and when to use each for catch-all behavior.
    Focus on routes vs middleware roles.
    You got /5 concepts.

      Practice

      (1/5)
      1. What does app.all('/path', handler) do in an Express app?
      easy
      A. It handles all HTTP methods for the specific '/path' route.
      B. It adds middleware for all routes starting with '/path'.
      C. It only handles GET requests for '/path'.
      D. It handles all routes and methods globally.

      Solution

      1. Step 1: Understand app.all usage

        app.all is designed to handle every HTTP method (GET, POST, PUT, DELETE, etc.) but only for the exact route specified.
      2. Step 2: Compare with other methods

        app.use adds middleware for all methods but for routes starting with a prefix, not just one exact path.
      3. Final Answer:

        It handles all HTTP methods for the specific '/path' route. -> Option A
      4. Quick Check:

        app.all = all methods, exact path [OK]
      Hint: Remember: app.all = all methods, one exact path [OK]
      Common Mistakes:
      • Confusing app.all with app.use
      • Thinking app.all handles all routes globally
      • Assuming app.all only handles GET requests
      2. Which of the following is the correct syntax to add a catch-all middleware for all routes in Express without specifying a path?
      easy
      A. app.all('*', (req, res) => { res.send('Catch all'); });
      B. app.use((req, res) => { res.send('Catch all'); });
      C. app.use('*', (req, res) => { res.send('Catch all'); });
      D. app.all((req, res) => { res.send('Catch all'); });

      Solution

      1. Step 1: Understand catch-all middleware syntax

        Using app.use without a path applies middleware to all routes and methods.
      2. Step 2: Analyze options

        app.all('*', (req, res) => { res.send('Catch all'); }); and app.use('*', (req, res) => { res.send('Catch all'); }); both specify a path '*'. app.all((req, res) => { res.send('Catch all'); }); is invalid syntax.
      3. Final Answer:

        app.use((req, res) => { res.send('Catch all'); }); -> Option B
      4. Quick Check:

        app.use without path = catch-all middleware [OK]
      Hint: app.use without path catches all routes and methods [OK]
      Common Mistakes:
      • Using app.use('*', ...) which specifies a path
      • Using app.all without a path argument
      • Confusing app.all and app.use syntax
      3. What will be the output when a GET request is made to '/test' in this Express app?
      const express = require('express');
      const app = express();
      
      app.all('/test', (req, res, next) => {
        res.write('all ');
        next();
      });
      
      app.use('/test', (req, res) => {
        res.end('use');
      });
      
      app.listen(3000);
      medium
      A. Error: Cannot set headers after they are sent
      B. use
      C. all use
      D. all

      Solution

      1. Step 1: Trace app.all handler

        For GET '/test', app.all('/test') runs first, writes 'all ' to response, then calls next() to continue.
      2. Step 2: Trace app.use handler

        Next, app.use('/test') matches and ends the response with 'use'. So the full response is 'all use'.
      3. Final Answer:

        all use -> Option C
      4. Quick Check:

        app.all writes + next() then app.use ends response [OK]
      Hint: app.all runs first, next() continues to app.use [OK]
      Common Mistakes:
      • Assuming app.use runs before app.all
      • Thinking res.end in app.use causes error here
      • Ignoring next() call in app.all
      4. Identify the error in this Express code snippet:
      app.all('/api', (req, res) => {
        res.send('API all methods');
        next();
      });
      medium
      A. Calling next() after res.send() causes an error.
      B. app.all cannot be used with '/api' path.
      C. res.send() must be called twice in app.all.
      D. No error, code works fine.

      Solution

      1. Step 1: Understand res.send() behavior

        res.send() ends the response and sends data to client.
      2. Step 2: Analyze next() call after res.send()

        Calling next() after res.send() tries to continue middleware chain after response ended, causing an error.
      3. Final Answer:

        Calling next() after res.send() causes an error. -> Option A
      4. Quick Check:

        res.send ends response; next() after it is wrong [OK]
      Hint: Never call next() after res.send() or res.end() [OK]
      Common Mistakes:
      • Thinking next() is always safe after res.send()
      • Believing app.all can't use paths
      • Ignoring response end behavior
      5. You want to create a global catch-all middleware without specifying a path that logs every request method and URL, then passes control to the next handler. Which code correctly implements this in Express?
      hard
      A. app.all('*', (req, res, next) => { console.log(req.method, req.url); next(); });
      B. app.all((req, res, next) => { console.log(req.method, req.url); next(); });
      C. app.use('*', (req, res, next) => { console.log(req.method, req.url); next(); });
      D. app.use((req, res, next) => { console.log(req.method, req.url); next(); });

      Solution

      1. Step 1: Understand global middleware with app.use

        Using app.use without a path applies middleware to all routes and methods globally.
      2. Step 2: Analyze options for logging middleware

        app.all('*', (req, res, next) => { console.log(req.method, req.url); next(); }); and app.use('*', (req, res, next) => { console.log(req.method, req.url); next(); }); specify a path '*'. app.all((req, res, next) => { console.log(req.method, req.url); next(); }); is invalid syntax.
      3. Final Answer:

        app.use((req, res, next) => { console.log(req.method, req.url); next(); }); -> Option D
      4. Quick Check:

        app.use without path = global middleware [OK]
      Hint: Use app.use without path for global middleware [OK]
      Common Mistakes:
      • Using app.use('*', ...) which specifies a path
      • Using app.all without path argument
      • Forgetting to call next() in middleware
      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