在我的小型 node.js 应用程序中,使用 express,我想记录所有传入的请求,所以我最终得到了这个:
var bodyParser = require('body-parser');
module.exports = function(app) {
app.set("port", 50001);
app.set("json spaces", 2);
app.use(bodyParser.json());
app.use(function (error, req, res, next) {
app.logger.info("received from "+req.get("X-Forwarded-For")+" : "+req.method+" "+req.originalUrl+" (Authorization: "+req.get("Authorization")+")");
//does not work if json is malformed
//app.logger.info("content :"+JSON.stringify(req.body));
if (error /*instanceof SyntaxError*/) {
res.status(400);
app.logger.error(error);
res.json({ error:{msg: error.message}});
} else {
next();
}
});
app.use(app.auth.initialize());
};
不幸的是,当出现错误(在我的情况下,正文中的 JSON 字符串格式不正确)时,我只能通过 app.logger.info
行获取日志。我在这里想念什么?
原文由 Julien 发布,翻译遵循 CC BY-SA 4.0 许可协议
Expressjs 根据你给它的回调类型来调整它的功能(这在 JS 库中并不常见,所以人们对此感到困惑并不奇怪)。
如果您在回调有四个参数的情况下执行此操作:
然后 Express 假定这是一个仅出错的中间件处理程序,并且只会在出现错误时调用。在 express 文档 中,请参阅标有 错误处理中间件 的部分。请注意该页面的这个特定部分:
而且,这里有一整节专门介绍 错误处理中间件 的文档。
如果您只使用三个参数:
然后,它是一个正常的中间件,在没有错误时调用。我不确定他们是否提供了一种同时获得两者的方法。但是,当然,作为一种解决方法,您可以将日志记录代码放入一个函数中,然后从两个独立的中间件处理程序调用该函数,一个用于错误,一个用于非错误。