症状
请求返回 500 Internal Server Error 且正文为通用信息。部分请求成功,说明进程存活,失败仅与某条代码路径或依赖相关。
诊断
用请求 id 关联日志并检查依赖:
app.use((req, res, next) => {
req.id = crypto.randomUUID();
next();
});
process.on('unhandledRejection', (err) => console.error(err));
在请求 id 下记录堆栈,仅返回通用信息。
修复
集中处理错误并保护依赖:
app.use((err, req, res, next) => {
console.error({ id: req.id, err: err.stack });
res.status(500).json({ error: 'internal', id: req.id });
});
为数据库与 HTTP 调用加入超时。
验证
重放失败的请求;它成功,且其请求 id 对应的日志中不再含异常,确认底层成因已解决。