Bird
Raised Fist0
Node.jsframework~8 mins

Error response formatting in Node.js - Performance & Optimization

Choose your learning style10 modes available
Performance: Error response formatting
MEDIUM IMPACT
This affects server response time and client rendering speed by controlling payload size and parsing complexity.
Sending error responses from a Node.js API
Node.js
res.status(500).json({ error: 'Database failure', code: 'DB_ERR' });
Sending minimal, consistent error messages reduces payload size and speeds up client parsing.
📈 Performance Gainreduces response size by 90%, speeds up client rendering by 50-100ms
Sending error responses from a Node.js API
Node.js
res.status(500).json({ error: err.message, stack: err.stack, data: largeDataObject });
Sending full error objects with stack traces and large data increases payload size and parsing time.
📉 Performance Costadds 20-50kb to response size, blocks rendering for 50-100ms on slow clients
Performance Comparison
PatternPayload SizeParsing TimeClient Render DelayVerdict
Full error object with stack and dataLarge (20-50kb)HighHigh (50-100ms delay)[X] Bad
Minimal error message with codeSmall (<2kb)LowLow (<10ms delay)[OK] Good
Rendering Pipeline
Error response formatting affects the network transfer and client-side JSON parsing stages, impacting how quickly the browser can render error messages.
→Network Transfer
→JSON Parsing
→Rendering
⚠️ BottleneckNetwork Transfer and JSON Parsing due to large payloads
Core Web Vital Affected
LCP
This affects server response time and client rendering speed by controlling payload size and parsing complexity.
Optimization Tips
1Avoid sending full error objects with stack traces in API responses.
2Use simple error messages with error codes to reduce payload size.
3Check response sizes in DevTools Network tab to monitor error response performance.
Performance Quiz - 3 Questions
Test your performance knowledge
What is a main performance issue when sending full error objects with stack traces in API responses?
AImproves client error debugging speed
BIncreases payload size and slows client parsing
CReduces server CPU usage
DSpeeds up network transfer
DevTools: Network
How to check: Open DevTools, go to Network tab, trigger the error response, click the request, and check the Response size and Timing.
What to look for: Look for large response payload sizes and long waiting or content download times indicating slow error response delivery.

Practice

(1/5)
1. What is the main purpose of using res.status() in Node.js error handling?
easy
A. To log errors on the server console
B. To send a success message to the client
C. To restart the server automatically
D. To set the HTTP status code for the response

Solution

  1. Step 1: Understand HTTP status codes

    HTTP status codes tell the client if a request succeeded or failed.
  2. Step 2: Role of res.status()

    This method sets the HTTP status code in the response, indicating success or error.
  3. Final Answer:

    To set the HTTP status code for the response -> Option D
  4. Quick Check:

    res.status() sets HTTP status code [OK]
Hint: Remember: status sets code, not message or logs [OK]
Common Mistakes:
  • Confusing status with sending messages
  • Thinking it logs errors
  • Assuming it restarts the server
2. Which of the following is the correct way to send a JSON error response with status 404 in Express?
easy
A. res.send(404).json({ error: 'Not found' })
B. res.status(404).json({ error: 'Not found' })
C. res.json(404, { error: 'Not found' })
D. res.error(404).send({ error: 'Not found' })

Solution

  1. Step 1: Check Express response methods

    Use res.status(code) to set status, then json() to send JSON.
  2. Step 2: Validate syntax correctness

    Only res.status(404).json({ error: 'Not found' }) is valid syntax.
  3. Final Answer:

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

    Set status then send JSON [OK]
Hint: Use res.status(code).json(object) for error responses [OK]
Common Mistakes:
  • Calling res.send() before json()
  • Passing status code inside json()
  • Using non-existent res.error() method
3. Given this Express error handler code:
app.use((err, req, res, next) => {
  res.status(500).json({
    message: err.message,
    code: 'SERVER_ERROR'
  });
});

What will the client receive if an error with message 'Database down' occurs?
medium
A. {"message":"Database down","code":"SERVER_ERROR"} with status 500
B. {"error":"Database down"} with status 200
C. Plain text 'Database down' with status 500
D. Empty response with status 500

Solution

  1. Step 1: Analyze the error handler response

    The handler sets status 500 and sends JSON with message and code fields.
  2. Step 2: Match error message and response

    The JSON includes the error message 'Database down' and code 'SERVER_ERROR'.
  3. Final Answer:

    {"message":"Database down","code":"SERVER_ERROR"} with status 500 -> Option A
  4. Quick Check:

    Error message and code sent as JSON with 500 status [OK]
Hint: Error handlers send JSON with message and code [OK]
Common Mistakes:
  • Assuming status 200 by default
  • Expecting plain text instead of JSON
  • Missing error code in response
4. Identify the error in this Express error response code:
app.use((err, req, res) => {
  res.status(400).json({ message: err.message });
});
medium
A. Missing the next parameter in the middleware function
B. Using res.status() instead of res.sendStatus()
C. Not calling res.end() after json()
D. Incorrect status code for errors

Solution

  1. Step 1: Check Express error middleware signature

    Error middleware must have four parameters: err, req, res, next.
  2. Step 2: Identify missing parameter

    The code has only three parameters, missing next, so Express won't recognize it as error handler.
  3. Final Answer:

    Missing the next parameter in the middleware function -> Option A
  4. Quick Check:

    Error middleware needs 4 params: err, req, res, next [OK]
Hint: Error middleware must have 4 parameters [OK]
Common Mistakes:
  • Leaving out next parameter
  • Confusing res.status() with res.sendStatus()
  • Thinking json() needs res.end()
5. You want to send a detailed error response with a custom code and message, but only if the error has a statusCode property. Otherwise, send a 500 status with a generic message. Which code snippet correctly implements this in Express?
hard
A. app.use((err, req, res, next) => { if (err.statusCode) { res.json({ code: err.statusCode, message: err.message }); } else { res.status(500).send('Error'); } });
B. app.use((err, req, res) => { res.status(err.statusCode).json({ message: err.message }); });
C. app.use((err, req, res, next) => { const status = err.statusCode || 500; const message = err.message || 'Internal Server Error'; res.status(status).json({ code: status, message }); });
D. app.use((err, req, res, next) => { res.status(500).json({ code: 'ERROR', message: 'Something went wrong' }); });

Solution

  1. Step 1: Check for error statusCode and message

    Use err.statusCode if present, else default to 500; similarly for message.
  2. Step 2: Send JSON response with status and message

    Set status with res.status(status) and send JSON with code and message fields.
  3. Final Answer:

    app.use((err, req, res, next) => { const status = err.statusCode || 500; const message = err.message || 'Internal Server Error'; res.status(status).json({ code: status, message }); }); -> Option C
  4. Quick Check:

    Use defaults and send JSON with status and message [OK]
Hint: Use || to default status and message in error handler [OK]
Common Mistakes:
  • Missing next parameter in middleware
  • Not defaulting status or message
  • Sending plain text instead of JSON
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