javascript - 如何在 Expressjs 中处理 unhandledRejection 和 uncaughtException 以避免 ERR_HTTP_HEADERS_SENT
问题描述
在 Expressjs 中,我正在处理unhandledRejection和uncaughtException事件,它们分别定义了两个中间件,一个 forunhandledRejectionHandler
和一个 for unhandledExceptionHandler
:
const unhandledRejectionHandler = (req, res, next) => {
process.setMaxListeners(process.getMaxListeners() + 1);
process.once('unhandledRejection', function(reason, p) { // unhandledRejection
self.logger.error("[unhandledRejection] error code:%d message:%s stack:%@:\n%@", reason.code, reason.message, reason.stack);
if (res.headersSent) {
next();
} else {
var errorMessage = APIHelper.createErrorMessage(500, '', '', reason.message);
res.status(500);
res.send(errorMessage);
res.end();
}
process.setMaxListeners(Math.max(process.getMaxListeners() - 1, 0));
});
next();
};
和
const unhandledExceptionHandler = (req, res, next) => {
...
然后照常注册:
self.app.use(unhandledRejectionHandler);
self.app.use(unhandledExceptionHandler);
我正在使用setMaxListeners来防止 10 个最大侦听器的警告限制。问题是即使检查http.ServerResponse类的 bool headersSent,我仍然可能会收到错误
ERR_HTTP_HEADERS_SENT: Cannot set headers after they are sent to the client
解决方案
推荐阅读
- deep-learning - 密集对应的数据增强?
- c++ - 直接访问类接口中成员的成员,无需继承
- javascript - 将本地 JSON 数据加载到图表中(JSON+Highcharts)
- javascript - 按下按钮时如何在文本框上触发验证?
- swift - 如何检查在 swift 中声明的 UnsafeMutablePointer 类型的变量的值
? - azure-devops - 使用 vsts rest api 时出现 203 错误
- asp.net-mvc - 如果通过 javascript 将destinationId 设置为0,则ModelState.IsValid 返回true,否则返回false
- python - NameError 加载 json 文件
- c# - 在 Xamarin 中添加自定义单元格
- c - Mirai 使用什么类型的加密?