如何从请求处理程序中获取数据

时间:2017-03-08 20:51:26

标签: javascript node.js express asynchronous

我正在使用快递,节点和把手。我有一些用于处理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>"
  }
}

但是,温度变量返回'未定义'。我认为这必须与异步性做一些事情,但我不确定我应该怎么做才能纠正它。

1 个答案:

答案 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);
      } 
    }