Javascript 尝试将会话注入Nodejs中异步函数内的请求体
我正在尝试向请求中注入会话值,以便在我的应用程序的不同情况下使用它。我所做的是调用一个函数,通过提供id在数据库中搜索用户,并返回该特定用户的名称。我面临的问题是,当我试图声明会话时,它看起来不工作,或者回调没有释放这个新值 让我向您展示我的代码示例,以获得更好的想法:Javascript 尝试将会话注入Nodejs中异步函数内的请求体,javascript,node.js,session,express,Javascript,Node.js,Session,Express,我正在尝试向请求中注入会话值,以便在我的应用程序的不同情况下使用它。我所做的是调用一个函数,通过提供id在数据库中搜索用户,并返回该特定用户的名称。我面临的问题是,当我试图声明会话时,它看起来不工作,或者回调没有释放这个新值 让我向您展示我的代码示例,以获得更好的想法: The middleware var express = require('express'); var session = require('express-session'); var router = express.R
The middleware
var express = require('express');
var session = require('express-session');
var router = express.Router();
var userSession = require('../../helpers/user/userSession');
router.use(function(req, res, next){
if (req.method == "GET") {
if (!req.user) {
req.session.username = '';
}else{
var sess = userSession.findUser(req.user, function(err, user){
if (user) {
console.log(user); //It contains the value i need
req.session.username = user; // Supposed to inject the user value to the username session variable.
};
console.log(req.session.username); //it works until here, out of this function not anymore.
});
console.log(req.session.username); //the req.session.username is empty now
};
return next();
}else{
return next();
}
});
检查用户是否存在
var mongoose = require('mongoose');
var User = mongoose.model('database')
module.exports = {
findUser: function(user, callback){
User.findOne({ 'unq_id' : user }, function(err, user){
if (err) {
console.log('Error: ' +err);
return callback(err, false);
};
if (user) {
//console.log(user);
return callback(null, user.user_collection.firstname);
}else{
return callback(err, false);
};
});
}
}
一个想法是将user的值赋予sess变量,但这似乎非常困难,因为它是异步调用。我相信有些人可能会遇到这个问题。
我怎样才能避开这件事?任何建议都将不胜感激 这个怎么样
router.use(function(req, res, next){
if (req.method == "GET") {
if (!req.user) {
req.session.username = '';
next();
} else {
userSession.findUser(req.user, function(err, user){
if (user) {
req.session.username = user;
};
next();
});
}
} else {
next();
}
});
这样,在检索用户名之前,它不会转到下一个中间件。您也不想返回回调-只要调用它就行了。是的,这就成功了,您救了我的一天。谢谢。:)