Javascript 带循环的节点jsdom不';行不通

Javascript 带循环的节点jsdom不';行不通,javascript,node.js,Javascript,Node.js,我试图从一系列HTML页面中提取数据。 对于访问,有一些参数包含查询。 这些参数保存到json中。儿子是这样写的 [ {"NM":"bla", "Code":"a12312"}, {"NM":"blabla", "Code":"a11231"}, {"NM":"dog", "Code":"b12311"}, ...] 接下来是parsing1.js的代码 var jsdom = require("jsdom"); var schCD = require('./ggElemCD.json');

我试图从一系列HTML页面中提取数据。 对于访问,有一些参数包含查询。 这些参数保存到json中。儿子是这样写的

[
{"NM":"bla", "Code":"a12312"},
{"NM":"blabla", "Code":"a11231"},
{"NM":"dog", "Code":"b12311"},
...]
接下来是parsing1.js的代码

var jsdom = require("jsdom");
var schCD = require('./ggElemCD.json');

for(i in schCD){
jsdom.env("http://www.~~skipped~~&HG_CD="+schCD[i].HG_CD+"~~skipped~~", ["http://code.jquery.com/jquery.js"],
       function(errors, window){
    var tObj= window.$('.TableType1 tbody tr:last td');
    console.log( "Name : "+schCD[i].HG_NM);
    console.log( "Code : "+schCD[i].HG_CD);

    var completeObj = {
        "HG_name": schCD[i],
        "HG_CD": schCD[i].HG_CD,
        "G1st_m" : tObj.get(0).innerHTML,
        "G1st_f" : tObj.get(1).innerHTML,
        "G2nd_m" : tObj.get(3).innerHTML,
        "G2nd_f" : tObj.get(4).innerHTML,
        "G3rd_m" : tObj.get(6).innerHTML,
        "G3rd_f" : tObj.get(7).innerHTML,
        "G4th_m" : tObj.get(9).innerHTML,
        "G4th_f" : tObj.get(10).innerHTML,
        "G5th_m" : tObj.get(12).innerHTML,
        "G5th_f" : tObj.get(13).innerHTML,
        "G6th_m" : tObj.get(15).innerHTML,
        "G6th_f" : tObj.get(16).innerHTML,
        "sp_m" : tObj.get(18).innerHTML,
        "sp_f" : tObj.get(19).innerHTML
    }
    console.log("value1 : "+completeObj.G1st_m);
    console.log("value2 : "+completeObj.G1st_f);
});
}
如果删除for语法并手动将HG_CD放入此代码中,它将正常工作。但是,当我插入for语法时,节点会打印错误消息

/Users/Snark/Dev/parsing/parsing1.js:8
    var tObj= window.$('.TableType1 tbody tr:last td');
                    ^

TypeError: Cannot read property '$' of undefined
    at Object.done (/Users/Snark/Dev/parsing/parsing1.js:8:18)
    at reportInitError (/Users/Snark/node_modules/jsdom/lib/jsdom.js:384:12)
    at /Users/Snark/node_modules/jsdom/lib/jsdom.js:220:9
    at Request._callback (/Users/Snark/node_modules/jsdom/lib/jsdom/browser/resource-loader.js:159:64)
    at self.callback (/Users/Snark/node_modules/jsdom/node_modules/request/request.js:198:22)
    at emitOne (events.js:77:13)
    at Request.emit (events.js:169:7)
    at Request.onRequestError (/Users/Snark/node_modules/jsdom/node_modules/request/request.js:820:8)
    at emitOne (events.js:77:13)
    at ClientRequest.emit (events.js:169:7)

您的问题与同时请求有关,因为您似乎有很多这样的请求,所以您应该等待请求完成,然后再向同一服务器发出另一个请求。以下是如何实现这一目标:


您的问题与同时请求有关,因为您似乎有很多这样的请求,所以您应该等待请求完成,然后再向同一服务器发出另一个请求。以下是如何实现这一目标:


如果
窗口
未定义,可能也传递了错误,您可以发布它吗?我指的是
jsdom.env
回调传递的错误(在您的例子中称为errors)。您的阵列中有多少项?你确定它们都能用吗?不管这些,您不应该以并行方式启动,更好地使用。{[Error:connect-ETIMEDOUT 210.102.102.210:80]代码:'ETIMEDOUT',errno:'ETIMEDOUT',syscall:'connect',地址:'210.102.102.210',端口:80}此错误消息传递了数千次。是的,我确信这一点。但无论如何,我会尽量做到两个方面。塔克斯。你能解释一下这个错误消息吗?我的猜测还是一样的:你不应该同时做这件事,这很可能与大量的同时请求有关。是的,你可以在评论中用ip复制这一点。我将把它作为答案发布。如果
窗口
未定义,可能也传递了一个错误,您可以发布它吗?我指的是
jsdom.env
回调传递的错误(在您的例子中称为errors)。您的阵列中有多少项?你确定它们都能用吗?不管这些,您不应该以并行方式启动,更好地使用。{[Error:connect-ETIMEDOUT 210.102.102.210:80]代码:'ETIMEDOUT',errno:'ETIMEDOUT',syscall:'connect',地址:'210.102.102.210',端口:80}此错误消息传递了数千次。是的,我确信这一点。但无论如何,我会尽量做到两个方面。塔克斯。你能解释一下这个错误消息吗?我的猜测还是一样的:你不应该同时做这件事,这很可能与大量的同时请求有关。是的,你可以在评论中用ip复制这一点。我会把它贴出来作为答案。再次,你真的给这个新手留下了深刻的印象。再次,你真的给这个新手留下了深刻的印象。
var jsdom = require("jsdom");
var async = require("async");
var schCD = require('./ggElemCD.json');


async.eachSeries(schCD, function(item, callback){

    jsdom.env(
        "http://www.~~skipped~~&HG_CD=" + item.HG_CD + "~~skipped~~", 
        ["http://code.jquery.com/jquery.js"],
        function(err, window){

            var tObj= window.$('.TableType1 tbody tr:last td');

            console.log( "Name : " + item.HG_NM);
            console.log( "Code : " + item.HG_CD);

            var completeObj = {
                "HG_name" : item,
                "HG_CD"   : item.HG_CD,
                "G1st_m"  : tObj.get(0).innerHTML,
                "G1st_f"  : tObj.get(1).innerHTML,
                "G2nd_m"  : tObj.get(3).innerHTML,
                "G2nd_f"  : tObj.get(4).innerHTML,
                "G3rd_m"  : tObj.get(6).innerHTML,
                "G3rd_f"  : tObj.get(7).innerHTML,
                "G4th_m"  : tObj.get(9).innerHTML,
                "G4th_f"  : tObj.get(10).innerHTML,
                "G5th_m"  : tObj.get(12).innerHTML,
                "G5th_f"  : tObj.get(13).innerHTML,
                "G6th_m"  : tObj.get(15).innerHTML,
                "G6th_f"  : tObj.get(16).innerHTML,
                "sp_m"    : tObj.get(18).innerHTML,
                "sp_f"    : tObj.get(19).innerHTML
            };

            console.log("value1 : " + completeObj.G1st_m);
            console.log("value2 : " + completeObj.G1st_f);

            callback(err);
        }
    );
}, function (err){

    console.log("Done.");
    err && console.log(err);
});