我正在尝试查看是否有办法从请求对象访问我的记录器。我有一个cusotm winston包装器,它使用winston,express-winston,以及在我的应用程序中保持清洁的时刻。
在我的app.js中我只有
var logger = require('winston-custom');
server.use(logger());
然后在控制器中我试图找到一种干净的方法让记录器离开请求对象(如果可能的话),所以我不必在这里导入它。我的第一个猜测是它在req.app上,但它似乎不是。
所以在我所拥有的同一台服务器的控制器中
function rootAPI(req, res) {
console.log("req.app", req.app);
这似乎没有提供任何东西,我甚至尝试记录req并挖掘它。有没有办法正确实现这一目标?谢谢!
答案 0 :(得分:2)
如果您确定需要此功能,可以通过在request
上添加自定义字段来实现此功能:
server.all("*", function(req, res, next)
{
req.logger = logger;
next();
});
答案 1 :(得分:1)
虽然上面的答案是正确的,但我们可以通过创建快速中间件来简化实现:
const app = express()
const loggerMiddleware = (req, res, next) => { req.logger = logger; next()};
app.use(loggerMiddleware)
调用next()
很重要,否则不会调用下一个中间件。