2017-08-12 129 views
-2

我知道其他人問過這個問題,我需要使用回調函數,但我不太確定如何將它們與我的代碼集成。在node.js中等待HTTP請求

我使用node.js和express來製作一個網站,並且在頁面加載時我希望網站去抓住天氣,等待響應,然後用它加載頁面。

我 'WeatherApp' 代碼如下:

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

 
function capitalizeFirstLetter(string) { 
 
\t return string.charAt(0).toUpperCase() + string.slice(1); 
 
} 
 
module.exports = { 
 
\t getWeather: function() { 
 
\t \t request(config.weatherdomain, function(err, response, body) { 
 
\t \t \t if (err) { 
 
\t \t \t \t console.log('error:', error); 
 
\t \t \t } else { 
 
\t \t \t \t let weather = JSON.parse(body); 
 
\t \t \t \t let returnString = { 
 
\t \t \t \t \t temperature: Math.round(weather.main.temp), 
 
\t \t \t \t \t type: weather.weather[0].description 
 
\t \t \t \t } 
 
\t \t \t \t return JSON.stringify(returnString); 
 
     } 
 
\t \t }); 
 
\t } 
 
}

而且我的頁面當前路由:

router.get('/', function(req, res, next) { 
 
\t var weather; 
 
\t weather = weatherApp.getWeather(); 
 
\t res.render('index', { 
 
\t \t title: 'Home', 
 
\t \t data: weather 
 
\t }); 
 
});

回答

0

幽祕x同步和異步方法,這就是爲什麼你會遇到這個問題。

我建議查看這篇文章瞭解差異。

What is the difference between synchronous and asynchronous programming (in node.js)

Synchronous vs Asynchronous code with Node.js

關於你的問題。解決方案很簡單。添加回調

getWeather: function(callback) { request(config.weatherdomain, function(err, response, body) { if (err) { callback(err, null) } else { let weather = JSON.parse(body); let returnString = { temperature: Math.round(weather.main.temp), type: weather.weather[0].description } callback(null, JSON.stringify(returnString)); } }); }

現在在路線

router.get('/', function(req, res, next) { weatherApp.getWeather(function(err, result) { if (err) {//dosomething} res.render('index', { title: 'Home', data: weather }); }); });

希望這有助於。

+0

非常感謝! :) –

+0

Np。樂意效勞。 –