javascript - 尝试将 session 注入(inject)到 Nodejs 异步函数中的请求主体中

标签 javascript node.js session express

我正在尝试将 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/

相关文章:

javascript - jQuery的scrollTop不触发

node.js - 如何将 Redis 哈希值转换为 JSON?

php - 为所有用户或仅为想要登录的用户创建 PHP session ?

不同环境下的 PHP session 问题

javascript - 从前端 fetch() 请求调用时,Express res.redirect() 不重定向浏览器 URL

cookies - 并发用户 session - 为什么我们看不到更多?

javascript - React-router 会影响页面加载时间吗?

javascript - 通过 Javascript 添加的 HTML 与普通 HTML 标记的性能比较

javascript - npx react-native 链接命令在最新版本的 react native 中不起作用。我们如何在我的项目中链接自定义字体系列

javascript - 使用 node-mysql 时出现 SQL 解析错误