Javascript 来自请求对象的节点/快速访问记录器
我正在尝试查看是否有方法从请求对象访问我的记录器。我有一个cusotm winston包装器,它使用winston、express winston和moment在我的应用程序中保持整洁 在我的app.js中,我只有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上,但
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只是要求看看它是否可以有效地完成,所以只是看看它是否可行,谢谢你的输入!