我正在使用快递,节点和把手。我有一些用于处理POST的代码。如果用户单击“添加项目”按钮,它将获取城市的条目,使用“开放天气地图API”查找该城市的天气,并根据天气更改该城市项目背景的颜色。 / p>
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>"
}
}
但是,温度变量返回'未定义'。我认为这必须与异步性做一些事情,但我不确定我应该怎么做才能纠正它。
答案 0 :(得分:0)
你可以写这样的代码
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>"
}
console.log('temp inside is '+ temperature);
}
}