Node.js 在express中使用next(err)方法将日志记录到控制台

Node.js 在express中使用next(err)方法将日志记录到控制台,node.js,express,Node.js,Express,express会将错误和堆栈跟踪记录到控制台。有什么方法可以抑制日志记录吗?如果您在Express实现中放置了一个错误处理程序中间件来处理下一个(err)调用,如下所示: app.get('/test', (req, res, next) => { const err = new Error('Test'); next(err); }); 然后,Express不会记录任何错误,您可以控制针对错误发送的响应 我建议您阅读有关快速错误处理的本页: 如果查看此日志记录来自的expre

express会将错误和堆栈跟踪记录到控制台。有什么方法可以抑制日志记录吗?

如果您在Express实现中放置了一个错误处理程序中间件来处理
下一个(err)
调用,如下所示:

app.get('/test', (req, res, next) => {
  const err = new Error('Test');
  next(err);
});
然后,Express不会记录任何错误,您可以控制针对错误发送的响应

我建议您阅读有关快速错误处理的本页:


如果查看此日志记录来自的express代码,它来自:

奇怪的是,如果你这样做:

function logerror(err) {
  /* istanbul ignore next */
  if (this.get('env') !== 'test') console.error(err.stack || err.toString());
}

或者在启动服务器之前在环境中设置
NODE\u ENV=test
,那么它也将跳过错误日志记录。但是,只使用您自己的错误处理程序控制事情要好得多,因为我介绍了在哪里您也可以控制发送什么类型的响应。

我已经在使用自定义错误处理程序,但在我的实例中,在它发送回请求后,我仍在调用其中的next(err)。显然,我只需要在已经发送了头的情况下调用nex(err)方法?@Reed-当您想继续处理更多路由处理程序时,可以调用
next()
。如果已发送响应,则不想继续进一步路由(因此不想调用
next()
),当然也不想在您自己的错误处理程序中处理错误并发送不想调用
next()的响应
,因为这样会命中默认错误处理程序并尝试发送另一个响应并进行日志记录。这很有意义,只是有点误导,因为他们提供的示例在默认错误处理程序部分中调用了下一个(err)方法。
function logerror(err) {
  /* istanbul ignore next */
  if (this.get('env') !== 'test') console.error(err.stack || err.toString());
}
app.set('env', 'test');