4

我试图让我的 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我自己的错误之类的事情上。这很糟糕,因为它包含堆栈跟踪和文件名/路径。

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

4

1 回答 1

9

从您的代码和使用中next,我假设您使用的是 express,因此,这是一个相当明确的问题。Express 将默认仅在开发模式下使用堆栈跟踪服务错误,而在生产模式下记录但不服务它们。

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

$ NODE_ENV=production node app.js
于 2013-10-23T12:37:13.563 回答