req.session 使用 express-session 未定义

新手上路,请多包涵

我刚刚开始学习如何将 cookie 与 node 和 express 一起使用,我希望得到一些帮助以使其正常工作。我尝试遵循 GitHub 上的 expressjs/session 教程,但是我得到 req.sessionundefined ,所以我无法设置或获取任何值。

我的目标是将用户的名字和姓氏保存到 cookie 中,以便自动填充输入字段。我不确定我是否需要使用 cookie-parser 或者 express-session 是否可以单独处理。我不知道如何进行,因为我是 cookie 和 express-session 的新手。

感谢所有帮助!提前致谢。

代码

let express = require('express');
let app = express();
let credentials = require('../modules/credentials.js');
let session = require('express-session');
let sessionOptions = {
  secret: credentials.cookieSecret,
  cookie: {
    maxAge:269999999999
  },
  saveUninitialized: true,
  resave:true
};

if (app.get('env') === 'production') {
  app.set('trust proxy', 1);
  sessionOptions.cookie.secure = true;
}
else {
  sessionOptions.cookie.secure = false;
}

app.use(session(sessionOptions));
let router = express.Router();
app.use(router);

let request = require('request');
let db = require('../modules/queries');
let bodyParser = require('body-parser');
let cookieParser = require('cookie-parser');

// app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

router.get('/me', function(req, res, next) {
  console.log('req.session: '+req.session);

  let firstName = req.session.firstName;
  let lastName = req.session.lastName;
  if (firstName && lastName) {
    res.render('student/me.jade', {firstName, lastName});
  }
  else {
    res.render('student/me.jade', { firstName: '', lastName: ''});
  }
});

router.post('/api/me', function(req, res, next) {
  let firstName = req.body.firstName;
  let lastName = req.body.lastName;
  // session.firstName = firstName;
  // session.lastName = lastName;
  req.session.firstName = firstName;
  req.session.lastName = lastName;
  console.log('session.firstName: '+session.firstName);
  db.addEvent(req, res, next);
});

module.exports = router;

原文由 Ron I 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 464
2 个回答

一旦您将路由器安装到 Express 应用程序上,随后在该应用程序上声明的任何中间件都不会因任何针对路由器的请求而被调用。

所以如果你有这个:

 app.use(router)
app.use(session(...));

会话中间件不会被 router 处理的任何请求调用(即使您声明了路由器应该在稍后处理的路由)。为此,您需要更改顺序:

 app.use(session(...));
app.use(router);

另一个问题是您正在导出 router ,它可能应该是 app (这是“持有”所有中间件、路由器等的实例):

 module.exports = app;

原文由 robertklep 发布,翻译遵循 CC BY-SA 3.0 许可协议

获取会话数据

首先,你必须初始化 express-session

 app.use(session({ resave: true ,secret: '123456' , saveUninitialized: true}));

然后当你想在会话中放置一些东西时

req.session.firstName = 'Aniruddha';
req.session.lastName = 'Chakraborty';

然后你可以检查没有错误

console.log('req.session: '+req.session.firstName);

注意:这是快速会话工作!

原文由 Aniruddha Chakraborty 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏