【问题标题】:req.session has no method 'touch'?req.session 没有“触摸”方法?
【发布时间】:2015-02-19 22:42:45
【问题描述】:

我正在尝试使用 express-session 和 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() 是 express-session 的内置功能。请帮忙?我的快速会话版本是 1.9.3。

【问题讨论】:

  • 我这几天遇到同样的问题。我使用的是旧版本的 express 3.x,但即使升级到 4.x,问题仍然存在

标签: node.js session express connect


【解决方案1】:

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

所以,只要确保您没有在代码中的任何位置显式覆盖 req.session

【讨论】:

  • 非常感谢。我确实需要覆盖当前会话,但我会找到另一种方法。
  • 您只需要覆盖会话中有意义的属性:req.session.user = {/* ... */}
【解决方案2】:

在使用 cookie-session 中间件之前,我可以通过使用 cookie-parser 中间件来解决这个问题:

var express = require('express')
var cookieParser = require('cookie-parser');
var cookieSession = require('cookie-session');

var app = express();
app.use(cookieParser());
app.use(cookieSession());

在 Express 4 上测试

【讨论】:

  • 在 Express 4 中,body-parser 和 cookie-parser 被移动到单独的模块中。不推荐使用的正文和 cookie 解析器是 Express 3 附带的。正文解析器解析请求正文。那些可能包含像 json 或 url 编码的表单数据。然后表单数据将出现在 req.body 中。 cookie 解析器解析 cookie 并将 cookie 信息放在中间件的 req 对象上。如果您知道秘密,它还会解密签名的 cookie。
【解决方案3】:

试试这个:

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

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

【讨论】:

    猜你喜欢
    • 2011-09-13
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 2021-12-07
    相关资源
    最近更新 更多