2017-05-15 68 views
0

因此,我在Node.js中構建了一個應用程序,並在其中創建了一個用於發出HTTP請求的路由器和API模塊。我在圍繞回調之間的值傳遞過程中掙扎着掙扎。重用異步回調的值

它看起來像這樣:

路由器:

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函數和回調參數進行回調

回答

1

是不正確的 嘗試這樣做:

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) <-------------- 
     } 
    }); 
} 
+0

謝謝你,那工作。你的回答解釋了我暫時無法得到的東西! –