Node.js变量仅用于当前请求?

时间:2014-06-20 21:28:02

标签: node.js session session-variables

我对Node.js很新,我想知道是否除了session()之外,我还可以使用"存储"存储当前请求的变量?

我有一个基于Authorization标头的API,以及一个存储在Redis中的有效标记池。

因此,我没有开会,也不想参加。

但我希望在此请求期间存储变量以供进一步使用。例如,我想存储与Redis中找到的令牌相对应的user_id,以便我可以在任何地方使用它。

如果我这样做:

app = express(); app.user_id = 1;

是否可以,或者我的user_id是否会成为应用处理的所有请求的全局? (简而言之:是为服务器处理的每个请求实例化的app,还是持久的?)

如果这不行,我怎么能在没有会话的情况下实现这样的目标呢?

感谢您的帮助:)

1 个答案:

答案 0 :(得分:5)

app处理所有请求,并且只会在启动时创建一次,但req仅在请求的生命周期内存在。请记住,Express中的req只是一个对象,因此可以分配值。因此,如果您希望允许控制器访问某些值(类似于会话),您可以执行以下操作:

var express = require('express');
var app = express();

// middleware that assigns a value '123' to 'req.user_id'
app.use(function(req, res, next) {
    req.user_id = 123;
    next();
});

// controller which responds with the 'req.user_id'
app.get('/hello', function(req, res){
  res.send('req.user_id: ' + req.user_id);  // responds with req.user_id: 123
});

app.listen(3000, function() {
    console.log('Listening on port 3000');
});

在上面的示例中,我创建的中间件为请求分配了一个名为user_id的值。该值适用于请求的生命周期。您可以执行类似的操作,为req分配动态值,以便您可以通过控制器访问它。