javascript - 是否可以获得 node.js 正在服务的当前请求?

标签 javascript node.js express

我正在使用 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/

相关文章:

javascript - 是否可以在不引用流的情况下取消管道对象

javascript - 如何将 HTTP header 发送到 Connect (Node.js) 中的静态目录

mongodb - Mongoose增量值几次后错误

javascript - TypeError : Router. use() 需要中间件函数但得到一个对象

javascript - 将值绑定(bind)到对象属性、对象、数组、AngularJS

javascript - 在 Coffeescript 中的参数中使用排除

javascript - 全高内容,宽度尽可能小

javascript - php javascript中的多折线图

node.js - 将 Actions-on-google 与 koa.js 结合使用时发送响应的正确方法

Node.js 如何在 server.js 中重写 URL