避免Node中的全局变量,如何从POST调用返回请求的主体

时间:2016-10-23 08:35:22

标签: node.js api http callback request

我还是Node的新手所以我确定我做错了什么,但有些搜索没有帮助,所以我们就是这样。

我正在向API请求获取天气数据。我可以获取数据并将其记录到控制台没问题,但是我无法获得请求的主体以最终回复原始POST。

var express = require('express');
var request = require('request');
var bodyParser = require('body-parser');   

// create a new express server
var app = express();

// serve the files out of ./public as our main files
app.use(express.static(__dirname + '/public'));

// make the web server use body-parser
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

// start server on the specified port and binding host
app.listen(appEnv.port, '0.0.0.0', function() {
  console.log("server starting on " + appEnv.url);
});

// Send information from the weather API to the console
app.post('/processWeather', function (req, res) {

    requestString = 'http://api.openweathermap.org/data/2.5/weather?id=7839805&appid=xxxxxxxx';

    request(requestString, function(err, res, body){    
    if (!err && res.statusCode == 200) {        
        console.log(body);          
    }   
  });

  //redirect back to homepage after getting the weather 
  res.redirect("/");
}); 

所以问题在于我不能简单地在 app.post 回调中使用 body 变量。我怀疑这是做异步逻辑但是我是新手我不能用最好的方法来解决这个问题而不使用全局变量来临时存储正文变量。如何将 body 变量的内容发送回浏览器?任何帮助非常感谢。欢呼声。

2 个答案:

答案 0 :(得分:0)

除非绝对必要,否则不要使用全局变量!

您可以使用会话。

req.session['weather'] = weatherData;  // Weather data
res.redirect("/");

你也可以使用很多其他方法。但这是我更喜欢的。

答案 1 :(得分:0)

我想出了我需要的东西。我所要做的就是将请求放在res.send

res.send(request(requestString));