我开始学习node.js。我在这里遇到了一个问题。我正在调用返回 JSON 的天气服务(网址如下)。
http://api.wunderground.com/api/Your_key/conditions/q/CA/San_Francisco.json
我想在 HTML 页面上显示 api 的结果。
我编写了以下代码(getInfo 模块)来检索并返回 JSON。
var fbResponse;
module.exports = function (url) {
var http=require('http');
http.get(url, function(res) {
var body = '';
res.on('data', function(chunk) {
body += chunk;
});
res.on('end', function() {
fbResponse = JSON.parse(body);
console.log("Got response: ", fbResponse.response);
});
}).on('error', function(e) {
console.log("Got error: ", e);
});
return fbResponse;
};
因此,为了使用这个模块,我创建了一个 test.js 文件,如下所示:
var relay = require('./getInfo');
var url = 'http://api.wunderground.com/api/Your_key/conditions/q/CA/San_Francisco.json';
var response;
var x=relay(url);
console.log (x);
输出如下:
undefined // console.log(x) from test.js
Got response: { version: '0.1',
termsofService: 'http://www.wunderground.com/weather/api/d/terms.html',
features: { conditions: 1 } }
测试代码中的控制台输出首先运行,其中没有数据。 HTTP get 稍后竞争并显示我需要的实际输出。
如何修改测试代码以进行阻塞调用,以便测试代码中的 var x 实际上具有 JSON 输出而不是未定义?
我可以在不阻塞调用 getInfo 模块的情况下获得所需的结果吗?