【问题标题】:passing variable from callback to express router将变量从回调传递到快速路由器
【发布时间】:2015-10-07 23:50:32
【问题描述】:

我刚开始深入研究 node.js,但我有这个问题我想不通。

我在文件 passportAuth.js 中创建了这个用户,并有一个回调以确保用户已创建。

看起来像这样:

req.tmpPassport = {};
var fb = new fbgraph.Facebook(accessToken, 'v2.2');
fb.me(function(err, me) {
    req.tmpPassport.me = me;
    fb.my.events(function(err, events) {
        req.tmpPassport.events = events;
        fb.my.friends(function(err, result){
            req.tmpPassport.results = result;
            post_user();
        });
    });
});

//the callback
function post_user() {
    // this function is only executed after the callback from the async call
    return req.tmpPassport;
}

现在,我想将 var post_user() 返回传递给我的 express 路由器,该路由器位于另一个文件 routes.js 中,并像这样渲染它:

router.get('/profile', securePages, function(req, res, next){
    res.render('profile', {title:'Welcome to aDating - Profile', user:--Pass Var Here--});
})

但我不知道如何...我试图要求这样的模块:

var fb_user = require('../auth/passportAuth.js');

然后像这样使用它:

   router.get('/profile', securePages, function(req, res, next){
        console.log(fb_user);
        res.render('profile', {title:'Welcome to aDating - Profile', user:req.fb_user});
    })

但它不起作用......有人可以帮忙吗?

【问题讨论】:

  • 路由用于处理来自应用程序外部的请求。如果我没记错的话,看起来好像您是在从文件创建用户,然后想去一条路线?你能详细说明一下吗?
  • 我会尝试更好地解释...我正在尝试创建用户而不是渲染用户的数据,所以如果让我们说用户有属性name,我将在个人资料页面中能够显示此名称...显然只有在设置此名称后,这就是为什么 post-user 在那里

标签: javascript node.js asynchronous express


【解决方案1】:

在您的自定义模块“passportAuth”中,您可以返回一个 javascript Promise,然后在您的路由器上使用,因为 require 是一个同步操作,但您的模块是异步的,因此,如果您返回一个 Promise,您的路由器将具有以下外观:

// fbUser 是一个 javascript Promise 对象

var fbUser = require('../auth/passportAuth.js');
router.get('/profile', securePages, function(req, res, next){
    fbUser.then(function(data) {
        res.render('profile', {title:'Welcome to aDating - Profile', user:data.me});
     }).catch(function(err) {
         res.status(500).send(err);
     });
});

你的模块 fbUser 是这样的:

module.exports = new Promise(function(resolve, reject) {
    fb.me(function(err, me) {
        if(err) {
            return reject(err);
        }

        fb.my.events(function(err, events) {
            if(err) {
                return reject(err);
            }

            fb.my.friends(function(err, result){
                if(err) {
                    return reject(err);
                }

                var data = {
                    me: me,
                    events: events,
                    result, result
                };

                resolve(data);
            });
        });
    });
});

【讨论】:

    猜你喜欢
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多