因此,我在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) <--------------
}
});
}