如何在node.js中动态读取外部json文件?
我正在创建一个网站,读取外部托管的json文件,然后使用node.js填充网站内容 为了演示我所追求的,这是我在node.js中尝试做的一个非常简化的版本如何在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); }); 我想做的事可能吗 (标记为“”
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从外部源访问内容。