【发布时间】:2022-01-25 03:25:40
【问题描述】:
我不明白为什么我的 ExpressJs 应用程序在中间件中发送 res.status(401) 时会崩溃。
假设我的 start.js 有:
app.use(middlewares.timestampValidator());
中间件声明如下:
timestampValidator: () => {
return (req, res, next) => {
[...]
if(error) {
res.status(401).json(new ServerResponse());
}
else {
next();
}
}
}
当错误成功地发送到客户端时,服务器会因此错误而崩溃:
节点:内部/进程/承诺:246 triggerUncaughtException(err, true /* fromPromise */); ^
[UnhandledPromiseRejection:此错误源于在没有 catch 块的情况下抛出异步 > 函数内部,或拒绝未使用 > > .catch() 处理的承诺。承诺被拒绝,原因是“假”。] { 代码:'ERR_UNHANDLED_REJECTION' }
但函数不是异步的。
我尝试在发送状态 401 后调用 next('error');,但应用程序继续路由,然后响应无法发送到客户端,因为已经发送。
【问题讨论】:
-
如果您注释掉
app.use(middlewares.timestampValidator());行 - 仍然以同样的方式崩溃?我想知道问题是否来自与代码不同的地方。 -
new ServerResponse()是做什么的? -
如果您能够在 github 上以最小样本复制错误,则可以保证解决您的问题。
标签: javascript node.js express