如何在node.js中存储请求级变量?

Pau*_*aul 15 node.js

对于只需要在单个请求期间可用的数据,应该在哪里存储?我在req和res对象上创建新属性,所以我不必将该数据从函数传递给函数.

req.myNewValue = 'just for this request'
Run Code Online (Sandbox Code Playgroud)

过程对象是一个选项吗?或者它是否在所有请求中全局共享?

pxw*_*ise 17

在Express 4中,最佳做法是在res.locals上存储请求级别变量.

包含作用于请求的响应局部变量的对象,因此仅对在请求/响应周期(如果有)期间呈现的视图可用.否则,此属性与app.locals相同.

此属性对于公开请求级别信息(例如请求路径名,经过身份验证的用户,用户设置等)非常有用.

app.use(function(req, res, next){
  res.locals.user = req.user;
  res.locals.authenticated = ! req.user.anonymous;
  next();
});
Run Code Online (Sandbox Code Playgroud)

process对象由所有请求共享,不应按请求使用.


fre*_*ish 14

如果你在谈论像这里传递的变量:

http.createServer(function (req, res) {
    req.myNewValue = 'just for this request';
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
Run Code Online (Sandbox Code Playgroud)

那么你正在做的事情真是太好了.req存储请求数据,您可以根据需要进行修改.如果你使用像Express这样的框架,那么它也应该没问题(请记住,你可以覆盖req对象的一些内置属性).

如果你通过"过程对象"引用全局变量process,那么绝对不是.这里的数据是全局的,根本不应该修改.