Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在node.js中动态读取外部json文件?_Json_Node.js - Fatal编程技术网

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

如何在node.js中动态读取外部json文件?,json,node.js,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); }); 我想做的事可能吗 (标记为“”

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


(标记为“”的副本,请参见下面我的评论以获取我的反驳)

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

AJAX_req.open( "GET", url, true );
第三个参数指定了异步请求

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

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

您正在尝试同步获取它。您应该瞄准的不是这样使用的函数:

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
  });
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
  }
});
但更像这样:

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
  });
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
  }
});
或者像这样:

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
  });
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
  }
});
您可以使用
请求
模块通过以下方式获取数据:

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
  });
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
  }
});
有关工作示例,请参见


有关更多信息,请参阅:

可能的重复我不认为它是重复的,因为这个问题特别集中在node.js上,而这个问题集中在基于浏览器的javascript上。与基于浏览器的js相比,node.js是一个非常不同的平台,因为node.js处理系统上的文件,browser js处理网站的DOM。此外,node.js还可以访问gazzillion npm插件,因此可能有更好的解决方案使用npm插件,而不是使用ajax,因为ajax主要是为基于浏览器的javascript设计的。此外,npm本机不支持XMLHttpRequest,而基于浏览器的js则支持XMLHttpRequest。不,大致相同。唯一的主要区别是API。异步JavaScript的概念和语法完全相同。无论是回电、发电机还是承诺。如果你真的读过副本,你会明白的。问题不是问如何做异步js。它主要询问如何使用node.js从外部源访问内容。