Error-handling middleware helps catch and respond to errors in your app. It keeps your app from crashing and shows friendly messages.
Error-handling middleware in Node.js
Introduction
Syntax
Node.js
app.use(function (err, req, res, next) {
// handle the error here
res.status(500).send('Something broke!');
});Error-handling middleware has four parameters: err, req, res, and next.
It must be added after all other middleware and routes.
Examples
Node.js
app.use(function (err, req, res, next) {
console.error(err.stack);
res.status(500).send('Oops! Something went wrong.');
});Node.js
app.use(function (err, req, res, next) {
if (err.type === 'database') {
res.status(500).send('Database error occurred');
} else {
res.status(500).send('General error');
}
});Sample Program
This app throws an error when visiting the home page. The error-handling middleware catches it, logs it, and sends a friendly message.
Node.js
import express from 'express'; const app = express(); app.get('/', (req, res) => { throw new Error('Test error'); }); // Error-handling middleware app.use((err, req, res, next) => { console.error('Error caught:', err.message); res.status(500).send('Sorry, an error happened!'); }); app.listen(3000, () => { console.log('Server running on http://localhost:3000'); });
Important Notes
Always place error-handling middleware last, after all routes.
Use console.error to log errors for debugging.
Sending generic messages helps keep your app secure by not revealing details.
Summary
Error-handling middleware catches errors in your app.
It has four parameters: err, req, res, and next.
Place it after all other middleware and routes to work properly.
Practice
1. What is the correct number of parameters for an error-handling middleware function in Node.js Express?
easy
Solution
Step 1: Recall the error middleware signature
Error-handling middleware in Express always has four parameters: err, req, res, and next.Step 2: Understand the role of each parameter
The first parameter is the error object, followed by the request, response, and next function to pass control.Final Answer:
Four parameters: err, req, res, next -> Option DQuick Check:
Error middleware = 4 parameters [OK]
Hint: Error middleware always has 4 parameters: err, req, res, next [OK]
Common Mistakes:
- Using 3 parameters like normal middleware
- Forgetting the err parameter
- Placing error middleware before routes
2. Which of the following is the correct syntax to define an error-handling middleware in Express?
easy
Solution
Step 1: Check parameter order in error middleware
The correct order is err, req, res, next for error-handling middleware.Step 2: Verify the syntax matches Express pattern
app.use((err, req, res, next) => { /* handle error */ }) matches the correct order and syntax for error middleware.Final Answer:
app.use((err, req, res, next) => { /* handle error */ }) -> Option AQuick Check:
Correct parameter order = err, req, res, next [OK]
Hint: Error middleware params start with err, then req, res, next [OK]
Common Mistakes:
- Mixing parameter order
- Placing err parameter last or in the middle
- Using normal middleware syntax for error middleware
3. Consider this Express app code snippet:
What will the client receive when requesting
app.get('/test', (req, res) => {
throw new Error('Fail');
});
app.use((err, req, res, next) => {
res.status(500).send('Error caught');
});What will the client receive when requesting
/test?medium
Solution
Step 1: Understand error thrown in route handler
The route throws an error which Express catches and passes to error middleware.Step 2: Error middleware sends 500 status and message
The error middleware sets status 500 and sends 'Error caught' to the client.Final Answer:
A 500 status with 'Error caught' message -> Option BQuick Check:
Error thrown -> error middleware response [OK]
Hint: Thrown errors go to error middleware response [OK]
Common Mistakes:
- Expecting 200 OK despite error
- Thinking server crashes without middleware
- Confusing 404 with error middleware response
4. What is wrong with this error-handling middleware code?
app.use((err, req, res) => {
res.status(500).send('Error!');
});medium
Solution
Step 1: Check error middleware parameters
Error middleware must have four parameters: err, req, res, next.Step 2: Identify missing parameter
The code is missing the next parameter, which is required even if unused.Final Answer:
It is missing the next parameter -> Option CQuick Check:
Error middleware needs 4 params including next [OK]
Hint: Error middleware always needs 4 parameters, including next [OK]
Common Mistakes:
- Omitting next parameter
- Placing error middleware before routes
- Using wrong parameter order
5. You want to log errors and then send a response in your Express app. Which is the best way to write the error-handling middleware?
What is a potential problem with this code if you add more error middleware after it?
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something broke!');
});What is a potential problem with this code if you add more error middleware after it?
hard
Solution
Step 1: Analyze middleware flow after sending response
Once res.send is called, response is sent and middleware usually ends.Step 2: Understand next() usage in error middleware
If next() is not called, any following error middleware won't execute.Step 3: Identify problem if more error middleware exists
Without calling next(err), later error middleware is skipped, possibly missing logging or handling.Final Answer:
It does not call next(), so later error middleware won't run -> Option AQuick Check:
Missing next() call skips later error middleware [OK]
Hint: Call next(err) to continue error middleware chain [OK]
Common Mistakes:
- Not calling next() after sending response
- Calling next() without error causing loops
- Logging errors outside middleware
Recommended
Ready to prove it?
Pass the test and this pattern moves unknown
10 questions ~5 mineasy hard
