Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.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
Javascript 如何从URL获取JSON并将其存储在变量(Node.js)中_Javascript_Node.js_Json - Fatal编程技术网

Javascript 如何从URL获取JSON并将其存储在变量(Node.js)中

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 + '/

我想从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 + '/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
route
results\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
我明白了。等一下