我正在尝试将 session 值注入(inject)到请求中,以便我可以在应用程序的不同情况下使用它。我正在做的是通过提供 id 来调用函数以在数据库中搜索用户并返回该特定用户的名称。我面临的问题是当我尝试声明 session 时,它看起来不起作用或者回调没有让这个新值出来。
让我向您展示我的代码示例,以获得更好的想法:
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();
}
});
这样,在检索到用户名之前,它不会转到下一个中间件。
关于javascript - 尝试将 session 注入(inject)到 Nodejs 异步函数中的请求主体中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31492428/