来自请求对象的节点/快递访问记录器

Node/Express access logger from request object

本文关键字:快递 访问 访问记 记录器 节点 请求 对象      更新时间:2023-09-26

我想看看是否有一种方法可以从请求对象访问我的日志记录器。我有一个自定义的winston包装器,它使用winston, express-winston和moment来保持我的应用程序的整洁。

在我的app.js中,我只有

  var logger = require('winston-custom');
  server.use(logger());

然后在控制器中,我试图找到一种干净的方法来让日志记录器离开请求对象(如果可能的话),所以我不必在这里导入它。我的第一个猜测是这是要求。应用程序,但似乎不是。

所以在同一个服务器的控制器中,我输入

 function rootAPI(req, res) {
  console.log("req.app", req.app);

似乎没有为我提供任何东西,我甚至尝试记录请求并挖掘它。有什么方法可以正确地做到这一点吗?谢谢!

如果你绝对确定你需要这个功能,你可以通过在request上添加一个自定义字段来实现它:

server.all("*", function(req, res, next)
{
    req.logger = logger;
    next();
});

虽然上面的答案是正确的,但我们可以通过创建一个快速中间件来简化实现:

const app = express()
const loggerMiddleware = (req, res, next) => { req.logger = logger; next()};
app.use(loggerMiddleware)

调用next()是很重要的,否则下一个中间件将不会被调用。

https://expressjs.com/en/guide/using-middleware.html