【发布时间】:2015-08-17 11:24:04
【问题描述】:
我在 node js 和 express 4 中遇到 express-session 问题。我在 routes/index.js 中设置了一个会话变量,但在 app.js 中不可用。但在另一个路由文件 users.js 中可用
路由/index.js
var sess;
router.get('/setsession',function(req,res){
sess=req.session;
sess.username="safeer";
res.send("hi "+sess.username);
});
router.get('/getsession',function(req,res){
sess=req.session;
res.send("hi "+sess.username); //here session value available
});
路由/users.js
var sess;
router.get('/session3',function(req,res){
sess=req.session;
res.send("hi "+sess.username); // here also session is available
});
app.js
var session = require('express-session');
app.use(session({secret: 'secret',saveUninitialized: true,resave: true}));
var sess;
app.get('/session1',function(req,res){
sess=req.session;
res.send("hi "+sess.username); //here session is undefined
});
app.use('/', routes);
app.use('/users', users);
谁能给我一个解决方案。 ?
【问题讨论】:
-
sess是全局(无作用域)变量吗?如果是这样,您应该期待未定义的行为。另外,您如何以及在哪里声明express-session中间件? -
sess 已定义。不包含在代码 sn-p 中。 express-session 在 app.js 中定义。我将编辑代码 sn-p。
-
您将
sess声明为模块范围的变量,这意味着并发请求将覆盖它。它需要被限定为每个请求处理程序。 -
我们在每个请求处理程序中重写为 sess=req.session;我认为 req.session 很重要
-
一旦您开始从请求处理程序中进行异步调用,您将遇到未定义的行为,因为并发请求共享相同的
sess变量。这很可能不会导致您在此处描述的问题,但我认为它至少值得警告。
标签: javascript node.js express-4 express-session