无法从node.js中的中间件获取会话数据
我有一个函数,可以在用户注册时获取其id无法从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
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()时保存会话