【问题标题】:Node.js variables for current request only?仅适用于当前请求的 Node.js 变量?
【发布时间】:2014-08-11 17:18:28
【问题描述】:

我是 Node.js 的新手,我想知道除了 session(),我是否可以使用“存储”来存储当前请求的变量?

我有一个基于授权标头的 API,以及存储在 Redis 中的有效令牌池。

因此我没有会话,也不想。

但我想在此请求期间存储变量以供进一步使用。比如我想把redis中找到的token对应的user_id存起来,这样我想用的地方就可以用了。

如果我这样做:

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

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

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

感谢您的帮助:)

【问题讨论】:

  • app 处理所有请求,并且只会在启动时创建一次。当你说“我想要的任何地方”时,它有多宽泛?可以将事物放在当前请求中,但是您必须有权访问请求才能访问它们。
  • 有多宽泛?嗯,我不知道。我习惯了会话。我只希望每个控制器都知道当前用户。那么,也许我可以按照您的建议插入请求中!查看文档后,似乎没有一个函数,所以也许我会将它用作关联数组。谢谢大佬们!你能发布一个答案以便我验证它吗?
  • 当然,如果您的想法是这样,请告诉我:)

标签: node.js session session-variables


【解决方案1】:

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 分配一个动态值,以便您可以通过控制器访问它。

【讨论】:

  • 谢谢,正是我需要的!
猜你喜欢
  • 1970-01-01
  • 2020-09-25
  • 2016-06-01
  • 2019-07-03
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多