【发布时间】:2017-07-12 01:43:22
【问题描述】:
问题很简单,但我找不到在针对Passport 进行测试时有效的解决方案。
假设我有一个像 https://localhost/auth/google/callback 这样的回调路由
现在,如果我在这里抛出垃圾参数,然后显示目录结构等信息,我会得到一个堆栈跟踪,这显然是不合适的。我不能盲目地依赖每条新路由来适当地处理错误。
如果 NodeJS 出现任何错误,我有什么方法可以禁用堆栈跟踪响应?
我尝试了以下方法:
app.use((err, req, res, next) => {
if (! err) {
return next();
}
res.status(500);
res.send('500: Internal server error');
});
这不适用于 PassportJS 中使用的 TokenError: Code was already redeemed.。
这甚至可能吗?显然,这仅适用于生产环境。
【问题讨论】:
-
仅供参考,如果您设置环境变量
NODE_ENV=production,则堆栈跟踪将不会包含在内置错误处理程序中。该信息的来源:expressjs.com/en/guide/error-handling.html。除此之外,如果正确实施,您显示的错误处理程序应该可以工作,尽管您不需要检查if (!err),因为除非出现错误,否则不会调用此中间件。 -
来自同一作者的类似问题:stackoverflow.com/questions/45047243/…。可能不需要这两个。
-
我删除了另一个。