gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:23:14 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com