【问题标题】:Handle any error Nodejs and don't return a stack trace处理任何错误 Nodejs 并且不返回堆栈跟踪
【发布时间】: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/…。可能不需要这两个。
  • 我删除了另一个。

标签: node.js error-handling


【解决方案1】:

您需要将 NODE_ENV 设置为生产来禁用堆栈跟踪,您可以将其更改为环境变量。

set NODE_ENV=production

或者如果不方便在程序本身中这样做:

process.env.NODE_ENV = 'production';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    相关资源
    最近更新 更多