-1
我正在使用express,node和handlebars。我有這段代碼來處理POST。如果用戶點擊「添加項目」按鈕,則它將輸入城市,使用打開天氣地圖API查找該城市的天氣,並根據天氣更改該城市項目背景的顏色。如何從請求處理程序中獲取數據
app.post('/',function(req,res){
var context = {};
var temperature;
if(req.body['Add Item']){
req.session.toDo.push({"name":req.body.name, "id":req.session.curId, "location":req.body.city});
req.session.curId++;
request('http://api.openweathermap.org/data/2.5/weather?q=' + req.body.city + '&units=imperial&APPID=' + credentials.owmKey, handleGet);
function handleGet(err, response, body){
if(!err && response.statusCode < 400){
context.owm = body;
var newText = JSON.parse(context.owm);
temperature = newText.main.temp;
}
}
}
...
if(temperature > 70) {
context.script = "<script>document.getElementById('owm').style.backgroundColor='LightGreen';</script>"
}
else if (temperature < 70){
context.script = "<script>document.getElementById('owm').style.backgroundColor='LightPink';</script>"
}
}
但是,溫度變量返回'未定義'。我認爲這必須做一些與異步性有關的事情,但我不知道我應該怎麼做來糾正它。
**你不**。這不是一個範圍問題,這是一個計時問題。您不知道請求何時返回,請求處理程序被觸發,因此「temprature」可用。您必須在請求處理程序中放入/調用所有依賴於「溫度」的邏輯。 – Thomas
接近dup:[如何返回來自異步調用的響應?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous -呼叫)。 – jfriend00