微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

node.js – 为什么express的默认错误处理程序行为会将堆栈跟踪返回给客户端?

我试图让我的http api服务器中的错误处理正常工作,我不明白节点的错误处理行为.

我已经定义了我自己的错误对象,如下所示:

function ServerError(statusCode,err,message) {
    this.status = statusCode;

    if (err != undefined) {
        this.err = err;

        if (message != undefined) {
            this.message = message;
        }
        else {
            this.message = err.message || err;
        }
    }
}

ServerError.prototype = new Error();

我在中间件或处理程序中使用这样的对象:

function forceError() {
    return function(req,res,next) {
        next(new ServerError(500,"Internal error!"));
    }
}

如果未定义任何处理程序,则会将此错误打印到控制台并在响应正文中返回.对于像TypeErrors这样的事情以及我自己的错误都会发生这种情况.这很糟糕,因为它包含堆栈跟踪和文件名/路径.

为什么快递返回堆栈跟踪?我认为认行为只是崩溃,因此不会将服务器上的任何信息泄露给客户端.

解决方法

从你的代码和下一个的使用,我假设你使用快递,所以,这是一个明确的问题. Express将认仅在开发模式下使用stacktraces提供错误,同时在生产模式下记录但不提供服务.

尝试在生产模式下运行您的应用:

$NODE_ENV=production node app.js

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐