Advanced Node.js Interview QuestionsAdvancedScenario
Node.js · Question 95
How would you implement centralized error handling middleware?
Direct answer
Use four-argument Express error middleware or Fastify setErrorHandler last — map AppError to status/code, log stack server-side, return safe JSON envelope, handle async errors via next(err) or framework auto-catch.
Scenario: consistent { error: { code, message } } responses across all AceDevHub API routes (Q62).
- AppError class — statusCode, code, isOperational flag.
- Throw in services — throw new AppError('Not found', 404).
- Handler last — after all routes; four args (err, req, res, next).
- Unknown errors — log full stack; respond 500 generic message.
scenario-error-middleware.mjs
app.use((err, req, res, next) => {
const status = err.statusCode ?? 500;
const code = err.code ?? "INTERNAL";
req.log?.error({ err, url: req.url }, err.message);
res.status(status).json({
error: {
code,
message: status < 500 ? err.message : "Internal Server Error",
},
});
});
// Async route
app.get("/x", async (req, res, next) => {
try {
await service.run();
res.json({ ok: true });
} catch (err) { next(err); }
});