如何在node.js中动态读取外部json文件?

时间:2016-09-21 08:12:36

标签: json node.js

我正在创建一个网站,该网站读取外部托管的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);
});

我想做的是什么?

(标记为“How do I return the response from an asynchronous call?”的副本,请参阅下面的评论以获得我的反驳意见

2 个答案:

答案 0 :(得分:3)

您正试图同步获取它。你应该瞄准的目标不是像这样使用的函数:

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

有关工作示例,请参阅this answer

有关详细信息,请参阅:https://www.npmjs.com/package/request

答案 1 :(得分:0)

我认为问题出在异步请求中。函数将在请求完成之前返回结果。

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

第三个参数指定为异步请求。

您应该在请求完成后添加处理程序并执行所有操作。

例如:

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