【问题标题】:Express-session defined in one route file not available in app.js Node JS在 app.js Node JS 中不可用的一个路由文件中定义的 Express-session
【发布时间】: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


【解决方案1】:

我建议你在会话中设置用户名:

在路由/index.js 中

router.get('/setsession',function(req,res){
       req.session.username="safeer"; 
       res.send("hi "+ req.session.username);
});

在 app.js 中

app.get('/session1',function(req,res){
    res.send("hi "+ req.session.username); //get from session. Can be set in variable too

});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 2020-03-26
    相关资源
    最近更新 更多