req.session没有方法'触摸'?

时间:2014-12-21 18:30:16

标签: node.js session express connect

我尝试使用带有connect-redis的快速会话来存储用户会话。目前,在用户登录后,我返回req.sessionID,然后每当用户想要向api的安全部分发出请求时,他/她必须提供会话ID。然后,身份验证中间件返回到redis并检查会话是否存在,如果存在,则将当前会话替换为存储在Redis中的会话。

function isLoggedIn(req, res, next){
  var session_id = req.body.session_id;
  if (!session_id){
    res.send(401, {status: 0, message: "Not authorized"});
    return;
  }
  console.log(req);
  sessionStore.get(session_id, function(err, session){
    if(err){
      res.send(401, {status: 0, message: "Not authorized"});
      return;
    }
    req.session = session;
    req.sessionID = req.body.session_id;
    return next();
  });
}

但出于某种原因,这个错误出现了:

/node_modules/express-session/index.js:269
  req.session.touch();
              ^
TypeError: Object #<Object> has no method 'touch'

我似乎无法在网上找到有此错误的其他人,因为touch()是表达会话的内置功能。请帮忙?我的快速会话版本是1.9.3。

3 个答案:

答案 0 :(得分:9)

我遇到了同样的错误。似乎如果您来自快速cookie会话,则可以设置req.session = {/* some arbitrary session object */}。显然,req.session在表达需求的实例上有一些方法。

因此,请确保您未在​​代码中的任何位置明确覆盖req.session

答案 1 :(得分:1)

试试这个:

req.session.user = { 'id': 123 }; 
req.session.pageviews = 1; // This too

字体:https://davidburgos.blog/expressjs-session-error-req-session-touch-not-function/

答案 2 :(得分:0)

在使用cookie-session中间件之前,我能够通过使用cookie-parser中间件解决此问题:

TextBox1.Text = Now.ToString()

在Express 4上测试