无法从node.js中的中间件获取会话数据

无法从node.js中的中间件获取会话数据,node.js,session,express,middleware,Node.js,Session,Express,Middleware,我有一个函数,可以在用户注册时获取其id user.save(function(err, id){ if(err) return next(err); req.session.uid=id; }) 然后,我写了这个中间件 var User = require('../user');//contains the code above m

我有一个函数,可以在用户注册时获取其id

            user.save(function(err, id){
                if(err) return next(err);
                req.session.uid=id;                         
            })
然后,我写了这个中间件

var User = require('../user');//contains the code above
module.exports = function(req,res,next){
    var uid = req.session.uid;
    if(!uid) return next();//if not logged in
    else{//else is logged in
        User.get(uid, function(err, user){
            //get user object and pass it to locals
            if (err) console.log("error from midd > "+err);
            req.user = res.locals.user = user;
            next();
        })
    }
}
我在
app.js
中定义中间件,如下所示

var user = require('./lib/middleware/user');
app.use(session({resave:'false', saveUninitialized:'false', secret:'secret'}));
app.use(user);  //<-- my middleware
app.use(express.static(path.join(__dirname, 'public')));
app.set('multimedia', __dirname + '/public/multimedia');
app.use(messages);
app.get('/register', register.form);
app.post('/register', register.submitit);
var user=require('./lib/middleware/user');
使用(会话({resave:'false',saveUninitialized:'false',secret:'secret'}));
应用程序使用(用户)// 注意:我不能确定这是您的错误,因为您没有在
user.save()
周围粘贴代码。但我有足够的信心这就是原因

:如果会话数据已被更改,则在HTTP响应结束时自动调用此方法(尽管可以使用中间件构造函数中的各种选项更改此行为)。因此,通常不需要调用此方法

正如我在这里看到的:

 user.save(function(err, id){
     if(err) return next(err);
     req.session.uid=id;                         
 })
你可以:

  • 无法保存新用户并使用
    next(err)
    继续该过程(这将结束HTTP响应)
  • 或者成功并可能陷入困境(注意:我不能确定这是您的错误,因为您没有在
    user.save()
    周围粘贴代码。但我有足够的信心这就是原因

    :如果会话数据已更改,则在HTTP响应结束时自动调用此方法(尽管此行为可以通过中间件构造函数中的各种选项进行更改)。因此,通常不需要调用此方法

    正如我在这里看到的:

     user.save(function(err, id){
         if(err) return next(err);
         req.session.uid=id;                         
     })
    
    你可以:

    • 无法保存新用户并使用
      next(err)
      继续该过程(这将结束HTTP响应)

    • 或者成功并可能陷入困境(如何将
      req
      传递给用户代码?您确定
      app.use(user)
      中的
      user
是中间件的功能(在此处查找require错误…@robertklep,通过此行
module.exports=函数(req,res,next){
。我想,
req
应该在那里完成trick@Cyrbil首先我做
var user=require('./lib/middleware/user');
。这包含了中间件的全部代码。然后我做
app.use(user);
After req.session.uid=id;您永远不会调用next().Express session仅当请求结束或显式调用save()时才会保存会话。如何将
req
传递给用户代码?您确定
app中的
user
。use(user);
是中间件的功能(此处查找require错误…@robertklep,按此行
module.exports=function(req,res,next){
。我想,
req
应该在那里完成trick@Cyrbil首先我做
var user=require('./lib/middleware/user');
。这包含了中间件的全部代码。然后我做
app.use(user);
After req.session.uid=id;您永远不会调用next().Express会话将仅在请求结束或显式调用save()时保存会话