📖 Scenario: You are building a simple Express server that handles user requests. Sometimes, errors happen during request processing. You want to catch these errors synchronously and send a proper error response.
🎯 Goal: Create an Express server with a route that throws a synchronous error. Add error handling middleware to catch the error and respond with a JSON error message.
📋 What You'll Learn
Create an Express app instance called app
Add a GET route at /error that throws a synchronous error with message 'Something went wrong!'
Add an error handling middleware function with four parameters: err, req, res, next
In the error handler, respond with status code 500 and JSON { error: err.message }
💡 Why This Matters
🌍 Real World
Web servers often encounter errors during request processing. Handling errors properly ensures users get clear messages and the server stays stable.
💼 Career
Knowing how to handle errors in Express is essential for backend developers building reliable Node.js web applications.
Progress0 / 4 steps
1
Set up Express app and route
Create an Express app instance called app. Add a GET route at /error that throws a new Error with the message 'Something went wrong!'.
Express
Hint
Use const app = express() to create the app. Use app.get('/error', (req, res) => { throw new Error('Something went wrong!') }) to add the route.
2
Add error handling middleware
Add an error handling middleware function with parameters err, req, res, next to the app. For now, just add the function without implementation.
Express
Hint
Use app.use to add the error handler middleware with four parameters.
3
Implement error handler response
Inside the error handling middleware, respond with status code 500 and JSON object { error: err.message } using res.status(500).json({ error: err.message }).
Express
Hint
Use res.status(500).json({ error: err.message }) to send the error response.
4
Start the Express server
Add code to start the Express server by calling app.listen(3000) to listen on port 3000.
Express
Hint
Use app.listen(3000) to start the server on port 3000.
Practice
(1/5)
1. In Express, how do you handle synchronous errors inside a route handler?
easy
A. Use setTimeout to catch errors asynchronously
B. Use async/await without try...catch
C. Ignore errors and let the server crash
D. Use a try...catch block and call next(error) inside catch
Solution
Step 1: Understand synchronous error handling
Synchronous errors happen immediately and can be caught with try...catch blocks.
Step 2: Pass error to Express error handler
Inside catch, call next(error) to forward the error to Express's error middleware.
Final Answer:
Use a try...catch block and call next(error) inside catch -> Option D
Quick Check:
try...catch + next(error) = A [OK]
Hint: Catch sync errors with try...catch and call next(error) [OK]
Common Mistakes:
Not using try...catch for synchronous errors
Calling next() without an error object
Using async/await without try...catch for sync errors
2. Which of the following is the correct syntax to pass a synchronous error to the next middleware in Express?
easy
A. next(new Error('Something went wrong'))
B. throw new Error('Something went wrong')
C. res.send(new Error('Something went wrong'))
D. console.error('Something went wrong')
Solution
Step 1: Identify how to forward errors in Express
Express expects errors to be passed to next() as an argument to trigger error middleware.
Step 2: Check syntax correctness
Calling next(new Error('...')) correctly passes the error object to Express.
Final Answer:
next(new Error('Something went wrong')) -> Option A
Quick Check:
next(error) syntax = B [OK]
Hint: Use next(error) to forward errors in Express [OK]
Common Mistakes:
Throwing error without try...catch in sync code
Sending error object in response instead of next()
Logging error without forwarding it
3. What will be the output when this Express route is called?
B. Error is thrown but not caught or passed to next()
C. Error middleware is missing
D. next() is called after throw, which is unreachable
Solution
Step 1: Check error throwing without try...catch
The error is thrown synchronously but not caught, so Express cannot handle it properly.
Step 2: Understand consequence of uncaught error
Without try...catch and calling next(err), the server may crash or not handle error gracefully.
Final Answer:
Error is thrown but not caught or passed to next() -> Option B
Quick Check:
Throw without catch + next(err) = D [OK]
Hint: Always catch sync errors and call next(error) [OK]
Common Mistakes:
Throwing error without try...catch
Calling next() after throw (unreachable code)
Assuming Express auto-catches thrown errors
5. You want to handle synchronous errors in multiple routes without repeating try...catch blocks. Which Express feature helps you achieve this cleanly?
hard
A. Create a wrapper function that catches errors and calls next(err)
B. Use setTimeout to delay error throwing
C. Call res.end() immediately to avoid errors
D. Use global variables to store errors
Solution
Step 1: Recognize repetitive try...catch problem
Wrapping every route in try...catch is repetitive and cluttered.
Step 2: Use a wrapper function to centralize error catching
A wrapper function can run the route handler and catch sync errors, forwarding them with next(err).
Final Answer:
Create a wrapper function that catches errors and calls next(err) -> Option A
Quick Check:
Wrapper function for sync error handling = C [OK]
Hint: Use wrapper functions to catch and forward sync errors [OK]
Common Mistakes:
Trying to delay errors with setTimeout
Ignoring errors by ending response early
Using global variables for error handling
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.