Javascript 如何从URL获取JSON并将其存储在变量(Node.js)中
我想从URL获取JSON,并将其存储在一个变量中,该变量也可以用于其他函数,但我不知道如何做到这一点 我尝试过使用jquery和ajax,但不知道如何将jquery添加到节点应用程序中Javascript 如何从URL获取JSON并将其存储在变量(Node.js)中,javascript,node.js,json,Javascript,Node.js,Json,我想从URL获取JSON,并将其存储在一个变量中,该变量也可以用于其他函数,但我不知道如何做到这一点 我尝试过使用jquery和ajax,但不知道如何将jquery添加到节点应用程序中 var express = require("express"); var app = express(); var http = require("http"); var getJSON = require('get-json'); app.use(express.static(__dirname + '/
var express = require("express");
var app = express();
var http = require("http");
var getJSON = require('get-json');
app.use(express.static(__dirname + '/public'));
app.get("/", function (req, res) {
res.render("home.ejs");
});
app.get("/website", function (req, res) {
res.render("website_pick.ejs");
});
app.get("/item", function (req, res) {
var web1 = req.query.web1;
var web2 = req.query.web2;
var web3 = req.query.web3;
if (web2 == undefined) {
web2 = '';
}
if (web3 == undefined) {
web3 = '';
}
app.set('web1', web1);
app.set('web2', web2);
app.set('web3', web3);
res.render("item_pick.ejs");
});
app.get("/display", function (req, res) {
var item = req.query.item;
app.set('item', item);
var web1 = app.get('web1');
var web2 = app.get('web2');
var web3 = app.get('web3');
var item_split = item.split(" ");
var item_join = item_split.join('+');
var results_1 = [];
for (var i = 0; i < 9; ++i) {
var result_page = 1 + (10 * i);
var result_url = 'https://www.googleapis.com/customsearch/v1?key=&cx=&num=10&siteSearch=' + web1 + '&siteSearchFilter=i&q=' + item_join + '&start=' + result_page;
getJSON(result_url, function (error, response) {
for (var i = 0; i < 9; ++i) {
var result_item = response['items'][i];
results_1.push([result_item['title'], result_item['link'], result_item['pagemap']['cse_image'][0]['src']]);
}
});
}
res.render("display.ejs", {result_list: results_1,});
});
app.listen(5000);
var express=要求(“快递”);
var-app=express();
var http=require(“http”);
var getJSON=require('get-json');
app.use(express.static(uu dirname+/public));
应用程序获取(“/”,函数(请求,恢复){
res.render(“home.ejs”);
});
应用程序获取(“/网站”,功能(请求、回复){
res.render(“网站_pick.ejs”);
});
应用程序获取(“/item”,函数(请求、恢复){
var web1=req.query.web1;
var web2=req.query.web2;
var web3=req.query.web3;
if(web2==未定义){
web2='';
}
if(web3==未定义){
web3='';
}
应用程序集('web1',web1);
应用程序集('web2',web2);
应用程序集('web3',web3);
res.render(“项目拾取ejs”);
});
应用程序获取(“/display”,函数(req,res){
var item=req.query.item;
应用程序集(“项目”,项目);
var web1=app.get('web1');
var web2=app.get('web2');
var web3=app.get('web3');
var item_split=item.split(“”);
var item_join=item_split.join('+');
var结果_1=[];
对于(变量i=0;i<9;++i){
var结果=1+(10*i);
var结果https://www.googleapis.com/customsearch/v1?key=&cx=&num=10&siteSearch=“+web1+”&siteSearchFilter=i&q=”+item_join+“&start=”+result_page;
getJSON(结果、url、函数(错误、响应){
对于(变量i=0;i<9;++i){
var结果_项=响应['items'][i];
结果1.推送([result_item['title']、result_item['link']、result_item['pagemap']['cse_image'][0]['src']);
}
});
}
res.render(“display.ejs”,{result\u list:results\u 1,});
});
app.listen(5000);
在
display
routeresults\u 1
中的getJSON
块中存储了正确的数据,但是在display.ejs
result\u列表中
是空的results\u 1
是空的,因为您在getJSON
完成之前使用了它,并且执行了将数据放入result\u 1
的回调
更新
您需要使用Promise.all
等待所有getJSON
请求完成,然后呈现结果
app.get("/display", function (req, res) {
var item = req.query.item;
app.set('item', item);
var web1 = app.get('web1');
var web2 = app.get('web2');
var web3 = app.get('web3');
var item_split = item.split(" ");
var item_join = item_split.join('+');
var results_1 = [];
var promises = [];
for (var i = 0; i < 9; ++i) {
var result_page = 1 + (10 * i);
var result_url = 'https://www.googleapis.com/customsearch/v1?key=&cx=&num=10&siteSearch=' + web1 + '&siteSearchFilter=i&q=' + item_join + '&start=' + result_page;
promises.push(new Promise(function(resolve, reject){
getJSON(result_url, fuction (error, response) {
if (error) {
reject(error);
}
for (var i = 0; i < 9; ++i) {
var result_item = response['items'][i];
results_1.push([result_item['title'], result_item['link'], result_item['pagemap']['cse_image'][0]['src']]);
}
resolve('done');
});
}));
}
Promise.all(promises)
.then(function() {
res.render("display.ejs", {result_list: results_1});
})
.catch(function(error) {
console.log(error);
})
});
app.get(“/display”,函数(req,res){
var item=req.query.item;
应用程序集(“项目”,项目);
var web1=app.get('web1');
var web2=app.get('web2');
var web3=app.get('web3');
var item_split=item.split(“”);
var item_join=item_split.join('+');
var结果_1=[];
var承诺=[];
对于(变量i=0;i<9;++i){
var结果=1+(10*i);
var结果https://www.googleapis.com/customsearch/v1?key=&cx=&num=10&siteSearch=“+web1+”&siteSearchFilter=i&q=”+item_join+“&start=”+result_page;
承诺.推送(新承诺(功能)(解决、拒绝){
getJSON(结果、url、函数(错误、响应){
如果(错误){
拒绝(错误);
}
对于(变量i=0;i<9;++i){
var结果_项=响应['items'][i];
结果1.推送([result_item['title']、result_item['link']、result_item['pagemap']['cse_image'][0]['src']);
}
决议(“完成”);
});
}));
}
所有(承诺)
.然后(函数(){
res.render(“display.ejs”,{result\u list:results\u 1});
})
.catch(函数(错误){
console.log(错误);
})
});
我可能会将其重构为一个可以接受回调的函数(如果您没有使用Promissions…您可能应该是:)
函数getData(回调){
var结果=[];
var错误=[];
var请求_计数=9;
对于(var i=1;i{
getJSON(结果url,(错误,响应)=>{
如果(错误)返回拒绝(错误);
对于(设i2=0;i2<9;++i){
var结果_项=响应['items'][i];
解析([result_item['title']、result_item['link']、result_item['pagemap']['cse_image'][0]['src']]);
}
})
}))
}
const results=wait Promise.all(请求)
返回结果
}
这段代码未经测试,但应该会让您朝着正确的方向前进。行results\u 1.push(//…
)只有在请求完成后才会执行(显然)。如果有任何东西试图抓取results\u 1的内容,我猜这正是“块外”发生的事情-它会变成空的。那么我如何解决这个问题呢?你需要共享更多的代码来描述你想对结果\u 1
做什么。我添加了更多的代码,希望它能有所帮助。事情是我需要我的外部for循环完成,然后才能将结果\u 1
发送到显示。ejs
我明白了。等一下