尝试将会话注入到Node.js中异步函数内的请求主体中

Itismelito

我正在尝试将会话值注入请求中,以便可以在我的应用程序的不同情况下使用它。我正在做的是通过提供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);
        };
    });
}
}

一种想法是给sess变量用户值,但由于是异步调用,因此显得很困难。我确信其中一些可能会遇到此问题。我该如何解决?任何建议将不胜感激。

马特·布朗(Matt Browne)

这个怎么样?

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

这样,只有在检索到用户名之后,它才会进入下一个中间件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在异步函数内写入 Node.JS 中的文件

使用代理将会话保持在node.js中

Node js请求-响应中为空主体

将会话属性从jsp传递到javascript函数

在异步函数Node.Js中调用的异步函数

在Node.js中循环异步函数

如何将会话设置为函数需要将标头存储到函数中

尽管设置了“ UseCookies”,ASP.NET仍将会话状态注入URL中

将会话变量从控制器传递到 express js 中查看

无法将会话值分配给node.js中的varibale

如何将会话数据存储到Bot Builder中的自定义存储中

如何将会话变量传递到 PHP 中的表单中?

如何将会话参考(词典)存储到Azure DB存储中

将会话变量传递到zf2中的外部url

在 JavaScript/node js 中的 for 循环中调用异步函数

正确的过程以在node.js中调用多个异步函数

如何从 node.js 中的异步函数返回值

如何在Node.js中显示异步函数的结果

如何在Node.js中处理异步函数

如何在Node.js中处理异步函数

如何从先前的测试中检索会话并将会话变量作为URL路径的一部分注入

如何从Node.js中的异步axios请求中获取数据

如何将会话变量从express / node传递到angular?

即使等待位于 Node.js 中的异步函数中,如何修复“await 仅在异步函数中有效”?

将会话存储在Codeigniter中的最佳方法

需要通过CURL将会话共享到PHP中相同域上的LOCAL psuedo服务器

Node js将变量传递到请求回调函数中

当响应是异步的时,Node.js 中如何处理多个并发请求?

使用异步在Node.js中批量处理并行HTTP请求