如何dynamic地读取node.js中的外部json文件?

我正在创build一个读取外部托pipe的json文件的网站,然后使用node.js填充网站内容。

只是为了展示我之后,这是一个真正简化的版本,我正在尝试在node.js中做什么

var ids = [111, 222, 333]; ids.forEach(function(id){ var json = getJSONsomehow('http://www.website.com/'+id+'.json'); buildPageContent(json); }); 

我想做什么?

(标记为“ 如何从asynchronous调用返回响应? ”请参阅我的评论以下我的反驳)

你正试图同步。 你应该瞄准什么,而不是像这样使用的function:

 var json = getJSONsomehow('http://www.website.com/'+id+'.json'); 

但更像这样:

 getJSONsomehow('http://www.website.com/'+id+'.json', function (err, json) { if (err) { // error } else { // your json can be used here } }); 

或者像这样:

 getJSONsomehow('http://www.website.com/'+id+'.json') .then(function (json) { // you can use your json here }) .catch(function (err) { // error }); 

您可以使用request模块来获取您的数据,如下所示:

 var request = require('request'); var url = 'http://www.website.com/'+id+'.json'; request.get({url: url, json: true}, (err, res, data) => { if (err) { // handle error } else if (res.statusCode === 200) { // you can use data here - already parsed as json } else { // response other than 200 OK } }); 

对于一个工作的例子看到这个答案 。

欲了解更多信息,请参阅: https : //www.npmjs.com/package/request

我认为问题是在asynchronous请求。 函数将在请求完成之前返回结果。

 AJAX_req.open( "GET", url, true ); 

第三个参数指定了asynchronous请求。

你应该添加处理程序,并在请求完成后做你想做的。

例如:

 function AJAX_JSON_Req( url ) { var AJAX_req = new XMLHttpRequest.XMLHttpRequest(); AJAX_req.open( "GET", url, true ); AJAX_req.setRequestHeader("Content-type", "application/json"); AJAX_req.onreadystatechange = function() { if (AJAX_req.readyState == 4 && AJAX_req.status == 200) { console.log(AJAX_req.responseText); } }; }