因此,我在Node.js中构建了一个应用程序,并表达了一个路由器和API模块,并从中发出HTTP请求。我正在努力地回避在回调之间传递值的问题。

看起来像这样:

路由器:

var dataAPI = require('../API/getData');
var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
        dataAPI.getData(function(res, data){
                res.render('index', {data: data});
        });
});

module.exports = router;


而且getAPI文件具有以下功能:

var request = require('request');
var config = require('../config/config');

getData = function(callback){
    request({
        headers: {
            'Content-Type' : 'application/json',
            'Authorization' : config.authorization.token
        },
        uri: config.url.get_portfolio,
        method: 'GET',
        rejectUnauthorized: false,
    }, function(err, res, body){
        if (err || body == undefined ){
            console.log("Error in first callback.");
            throw err;
        }
        console.log("HTTP: ", res.statusCode, " GOT DATA: ", body);
    });
}


我想在这里完成的工作是

res.render('index', {data })


并使用来自getData函数中的请求的数据。正确的方法是什么?

最佳答案

您尚未在getData函数发出的请求中使用回调,并且回调参数不正确
尝试这样做:

var dataAPI = require('../API/getData.js')
var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
        dataAPI.getData(function(err,data){
                if(err) throw err;
                res.render('index', {data: data});
        });
});


//getData.js文件

var request = require('request');
var config = require('../config/config');

exports.getData = function(callback){
    request({
        headers: {
            'Content-Type' : 'application/json',
            'Authorization' : config.authorization.token
        },
        uri: config.url.get_portfolio,
        method: 'GET',
        rejectUnauthorized: false,
    }, function(err, res, body){
        if (err || body == undefined ){
            console.log("Error in first callback")
            callback(new Error("Error in first callback."),null) <----------
        }else{
            console.log("HTTP: ", res.statusCode, " GOT DATA: ", body);
            callback(null,body) <--------------
        }
    });
}

09-17 20:41
查看更多