我正在使用 express.js。每当有人尝试记录消息时,我都需要能够记录某些请求数据。为此,我想创建一个这样的辅助方法
function log_message(level, message){
winston.log(level, req.path + "" + message);
}
然后我会使用这样的方法。
exports.index = function(req, res){
log_message("info", "I'm here");
}
请注意,我没有将 req 对象传递给 log_message 函数。我希望透明地完成,以便 log_message API 用户不需要知道正在记录的公共(public)数据。
有没有办法通过 express.js/node.js 实现这一点。请求对象是否可以从某种全局变量中获得?
最佳答案
一个有趣的方法是新的域功能。 http://nodejs.org/api/domain.html
域,在提供出色的错误恢复的同时,可以用作一种“线程本地存储”——基本上是为每个请求存储数据。
创建一些将每个请求/响应添加到域的中间件。
app.use(function(req, res, next) {
var reqd = domain.create();
reqd.add(req);
reqd.add(res);
reqd._req = req; // Add request object to custom property
// TODO: hook error event on reqd (see docs)
next();
});
在日志功能中,现在可以获取当前域并拉出请求对象。
function log_message(level, message) {
// Pull the request from the current domain.
var request = process.domain._req;
// TODO: log message
};
域仍处于试验阶段,但听起来从现在到 1.0 版本之间不会有太大变化。
关于javascript - 是否可以获得 node.js 正在服务的当前请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12575858/