Bird
Raised Fist0
Expressframework~10 mins

Error response formatting in Express - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Error response formatting
Request received
↓
Process request
↓
Error occurs?
No→Send success response
Yes↓
Format error response
↓
Send error response
↓
End request
This flow shows how Express handles a request, detects an error, formats an error response, and sends it back.
Execution Sample
Express
app.get('/user', (req, res) => {
  try {
    throw new Error('User not found');
  } catch (err) {
    res.status(404).json({ error: err.message });
  }
});
This code handles a GET request, throws an error, catches it, and sends a JSON error response with status 404.
Execution Table
StepActionError Thrown?Response StatusResponse Body
1Request to /user receivedNoN/AN/A
2Try block executesYes: 'User not found'N/AN/A
3Catch block catches errorYesSet status 404Prepare JSON { error: 'User not found' }
4Send responseYes404{ "error": "User not found" }
5Request endsN/AN/AN/A
💡 Error caught and formatted response sent with status 404
Variable Tracker
VariableStartAfter Step 2After Step 3Final
err.messageundefinedUser not foundUser not foundUser not found
res.statusCode200 (default)200404404
res.bodyemptyempty{ error: 'User not found' }{ error: 'User not found' }
Key Moments - 2 Insights
Why do we use res.status(404) before sending the JSON response?
Because res.status(404) sets the HTTP status code to 404, indicating 'Not Found'. The execution_table step 3 shows setting status before sending the JSON error message.
What happens if we forget to catch the error?
The server might crash or send a generic error. The execution_table shows catching the error at step 3 to format a proper response.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the response status at step 4?
A404
B200
C500
DUndefined
💡 Hint
Check the 'Response Status' column at step 4 in the execution_table.
At which step is the error message 'User not found' assigned to err.message?
AStep 1
BStep 2
CStep 3
DStep 4
💡 Hint
Look at the 'Error Thrown?' column in the execution_table.
If we remove res.status(404), what will be the default response status?
A404
B500
C200
D400
💡 Hint
Check the 'res.statusCode' variable in variable_tracker before step 3.
Concept Snapshot
Express error response formatting:
- Use try-catch to handle errors
- In catch, set status with res.status(code)
- Send JSON error with res.json({ error: message })
- Status code informs client about error type
- Always catch errors to avoid crashes
Full Transcript
When Express receives a request, it processes it inside a try block. If an error occurs, it is caught in the catch block. There, the response status is set to an appropriate error code like 404. Then, a JSON object with the error message is sent back to the client. This ensures the client knows what went wrong. Without catching errors, the server might crash or send unclear responses. Setting the status before sending the JSON is important so the client receives the correct HTTP status code.

Practice

(1/5)
1. What is the main purpose of using res.status() in Express error handling?
easy
A. To redirect the user to an error page
B. To send the error message as plain text
C. To set the HTTP status code of the response
D. To log the error on the server console

Solution

  1. Step 1: Understand the role of res.status()

    This method sets the HTTP status code that tells the client what kind of response it is (success, error, etc.).
  2. Step 2: Differentiate from other response methods

    Unlike sending messages or logging, res.status() only sets the status code, which is essential for error handling.
  3. Final Answer:

    To set the HTTP status code of the response -> Option C
  4. Quick Check:

    res.status() sets status code [OK]
Hint: Remember: status() sets code, json() sends data [OK]
Common Mistakes:
  • Confusing status() with sending the error message
  • Using status() to log errors instead of setting code
  • Thinking status() redirects the user
2. Which of the following is the correct way to send a JSON error response with status 404 in Express?
easy
A. res.json(404).send({ error: 'Not found' })
B. res.sendStatus(404).json({ error: 'Not found' })
C. res.status(404).send('Not found')
D. res.status(404).json({ error: 'Not found' })

Solution

  1. Step 1: Identify correct chaining of methods

    In Express, res.status(code) sets the status, and res.json(object) sends JSON data.
  2. Step 2: Check each option's syntax

    res.status(404).json({ error: 'Not found' }) correctly chains status(404) and json({ error: 'Not found' }). Others misuse method order or types.
  3. Final Answer:

    res.status(404).json({ error: 'Not found' }) -> Option D
  4. Quick Check:

    Use status() then json() [OK]
Hint: Set status first, then send JSON with json() [OK]
Common Mistakes:
  • Calling json() before status()
  • Using sendStatus() then json() which is invalid
  • Sending plain text instead of JSON for errors
3. What will be the HTTP status code and JSON response body when this Express code runs?
app.get('/data', (req, res) => {
  if (!req.query.id) {
    return res.status(400).json({ error: 'ID is required' });
  }
  res.json({ id: req.query.id });
});
medium
A. Status 400 with body { error: 'ID is required' }
B. Status 200 with body { id: undefined }
C. Status 404 with body { error: 'Not found' }
D. Status 500 with empty body

Solution

  1. Step 1: Analyze the condition for missing query parameter

    If req.query.id is missing, the code returns a 400 status with JSON error message.
  2. Step 2: Understand the response when ID is missing

    The code sends res.status(400).json({ error: 'ID is required' }), so status is 400 and body contains the error message.
  3. Final Answer:

    Status 400 with body { error: 'ID is required' } -> Option A
  4. Quick Check:

    Missing id triggers 400 error JSON [OK]
Hint: Check conditions that trigger res.status() before sending response [OK]
Common Mistakes:
  • Assuming status 200 when id is missing
  • Confusing 400 with 404 status codes
  • Ignoring the early return on error
4. Identify the error in this Express error response code:
app.use((err, req, res, next) => {
  res.json({ error: err.message });
  res.status(500);
});
medium
A. The status code is set after sending the response
B. The error message should not be sent in JSON
C. The middleware is missing the next() call
D. The error handler should not have four parameters

Solution

  1. Step 1: Check order of response methods

    Calling res.json() sends the response immediately. Setting status after sending has no effect.
  2. Step 2: Correct order for setting status and sending response

    Status must be set before sending JSON: res.status(500).json(...).
  3. Final Answer:

    The status code is set after sending the response -> Option A
  4. Quick Check:

    Status before sending response [OK]
Hint: Always set status before sending response [OK]
Common Mistakes:
  • Setting status after res.json()
  • Not sending status at all
  • Misunderstanding middleware parameters
5. You want to send a 422 Unprocessable Entity error with a JSON body containing { error: 'Invalid input', fields: ['name', 'email'] }. Which Express code snippet correctly formats this error response?
hard
A. res.json({ error: 'Invalid input', fields: ['name', 'email'] }).status(422);
B. res.status(422).json({ error: 'Invalid input', fields: ['name', 'email'] });
C. res.sendStatus(422).json({ error: 'Invalid input', fields: ['name', 'email'] });
D. res.status(400).json({ error: 'Invalid input', fields: ['name', 'email'] });

Solution

  1. Step 1: Choose the correct status code and method order

    Use res.status(422) to set the correct HTTP status code before sending JSON.
  2. Step 2: Verify the JSON body matches the required error format

    The JSON object includes both error and fields keys as specified.
  3. Final Answer:

    res.status(422).json({ error: 'Invalid input', fields: ['name', 'email'] }); -> Option B
  4. Quick Check:

    Status 422 then json() with error details [OK]
Hint: Set status 422 first, then send JSON error object [OK]
Common Mistakes:
  • Calling json() before status()
  • Using wrong status code like 400
  • Using sendStatus() which sends no JSON body
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