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

Javascript 来自请求对象的节点/快速访问记录器,javascript,node.js,logging,express,Javascript,Node.js,Logging,Express,我正在尝试查看是否有方法从请求对象访问我的记录器。我有一个cusotm winston包装器,它使用winston、express winston和moment在我的应用程序中保持整洁 在我的app.js中,我只有 var logger = require('winston-custom'); server.use(logger()); 然后,在控制器中,我试图找到一种干净的方法使记录器脱离请求对象(如果可能的话),因此我不必在这里导入它。我的第一个猜测是它出现在req.app上,但

我正在尝试查看是否有方法从请求对象访问我的记录器。我有一个cusotm winston包装器,它使用winston、express winston和moment在我的应用程序中保持整洁

在我的app.js中,我只有

  var logger = require('winston-custom');

  server.use(logger());
然后,在控制器中,我试图找到一种干净的方法使记录器脱离请求对象(如果可能的话),因此我不必在这里导入它。我的第一个猜测是它出现在req.app上,但似乎不是

所以在同一台服务器的控制器中

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

这似乎没有给我提供任何东西,我甚至试着记录和挖掘它。有没有办法正确地实现这一点?谢谢

如果您完全确定需要此功能,可以通过在
请求中添加自定义字段来实现:

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

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

const app = express()
const loggerMiddleware = (req, res, next) => { req.logger = logger; next()};
app.use(loggerMiddleware)
调用
next()
非常重要,否则不会调用下一个中间件


@dm03514我可以,有人问我是否有办法将它传递到req对象中(当然,如果可能的话),我的意思是,你可以在应用程序中要求它,然后在自定义中间件中将它附加到请求中,我只是不明白为什么你会这么做,而不是仅仅要求它。@KevinB只是要求看看它是否可以有效地完成,所以只是看看它是否可行,谢谢你的输入!