2015-09-28 31 views
1

我想從一個api返回JSON數據沿我的路由在一個快速服務器上。我對nodejs如何處理這種操作有點困惑。我在同一個文件中同時擁有一個函數和一個路由,因爲我得到了返回的視圖以及我想在控制檯中獲得的數據,所以路由起作用。路線和方法如下所示:發送一個函數響應expressjs路由

function getData() { 
    request(url, function (error, response, body) { 
     if (!error && response.statusCode == 200) { 
      console.log(body) // Show the HTML for the Google homepage. 
      return response.body; 
     }; 
    }); 
}; 

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

我想從getData()的數據中獲得路線響應。我認爲這樣做,但它只會打印數據到控制檯,我看不到問題。

+0

res.render呈現模板化視圖。您使用的是什麼視圖引擎以及您的模板中包含哪些內容? – Amit

回答

4

由於http請求的異步性質,這是不可能的。你必須重新調整它來進行回調。

function getData(callback) { 
    request(url, function (error, response, body) { 
     if (error) { 
      return callback(error); 
     } 
     if (response.statusCode == 200) { 
      console.log(body) // Show the HTML for the Google homepage. 
      //return response.body; 
      callback(null, response.body); 
     } else { 
      callback(response.statusCode); 
     } 
    }); 
}; 

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    getData(function (err, data) { 
     if (err) { 
      return next(err); 
     } 
     res.render('index', { title: 'About', data: data }); 
    });  
}); 
+0

所以這工作,但我仍然不清楚爲什麼。我想我的回調很難。有時候我應該或不應該使用回調?改變的getData()是基本方法寫在nodejs/JavaScript中的典型方式嗎?爲什麼我能夠簡單地'console.log'正文,但是同樣的方法不會返回數據? – eignhpants

+0

從內部函數返回不會從外部返回。 –