为什么express的默认error handling程序行为将堆栈跟踪返回给客户端?

我试图让我的http api服务器中的error handling工作正常,我不明白节点的error handling行为。

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

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这样的事情以及我自己的错误。 这很糟糕,因为它包含堆栈跟踪和文件名/path。

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

从你的代码和next使用,我假设你使用快递,所以,这是一个明确的问题。 Express将仅在开发模式下使用堆栈跟踪来默认提供错误,而在生产模式下进行日志logging但不提供服务。

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

 $ NODE_ENV=production node app.js