Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试将会话注入Nodejs中异步函数内的请求体_Javascript_Node.js_Session_Express - Fatal编程技术网

Javascript 尝试将会话注入Nodejs中异步函数内的请求体

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

我正在尝试向请求中注入会话值,以便在我的应用程序的不同情况下使用它。我所做的是调用一个函数,通过提供id在数据库中搜索用户,并返回该特定用户的名称。我面临的问题是,当我试图声明会话时,它看起来不工作,或者回调没有释放这个新值

让我向您展示我的代码示例,以获得更好的想法:

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();
    }
});

这样,在检索用户名之前,它不会转到下一个中间件。

您也不想返回回调-只要调用它就行了。是的,这就成功了,您救了我的一天。谢谢。:)