Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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 Node.js应用程序冻结_Javascript_Node.js - Fatal编程技术网

Javascript Node.js应用程序冻结

Javascript Node.js应用程序冻结,javascript,node.js,Javascript,Node.js,我将node.js与cheerio和request模块一起用于抓取。 我想抓取超过200000的内容。我写了一个脚本,请求内容列表,然后请求每个内容并将其保存到数据库中 到目前为止一切正常。我已经测试了保存1000个内容的脚本,并没有看到任何错误或bug发生 然后,我决定运行脚本来删除所有内容。 运行后,在抓取10000个内容后出现问题。我的应用程序开始冻结!它只是停止了,没有显示任何错误。我已经检查了cpu和内存的使用情况——它们都正常,mongodb很好,一切正常。脚本停止工作 以下是我用于

我将node.js与
cheerio
request
模块一起用于抓取。 我想抓取超过200000的内容。我写了一个脚本,请求内容列表,然后请求每个内容并将其保存到数据库中

到目前为止一切正常。我已经测试了保存1000个内容的脚本,并没有看到任何错误或bug发生

然后,我决定运行脚本来删除所有内容。 运行后,在抓取10000个内容后出现问题。我的应用程序开始冻结!它只是停止了,没有显示任何错误。我已经检查了cpu和内存的使用情况——它们都正常,mongodb很好,一切正常。脚本停止工作

以下是我用于刮取的代码:

var count = 1;

async.whilst(
    function () {
        return count < 2412;
    },
    function (callback) {

        request({
        url:"http://www.domain.com/limit/100/page/"+count,
            method:"GET"
        },
        function(error,response,body){
            if (!error && response.statusCode == 200) {
                if(body){
                    $ = cheerio.load(body);
                    $('.linear_news a').each(function(item){
                        console.log($(this).attr('href'))

                    if($(this).attr('href')){
                        request({
                            url:encodeURI("http://www.domain.com"+$(this).attr('href')),
                                method:"GET"
                            },
                            function(error,response,body1){
                                if (!error && response.statusCode == 200) {
                                    if(body){
                                        $ = cheerio.load(body1);

                                        var title = $('.title a').text();
                                        if($('head > base').attr('href')){
                                            var postId =$('head > base').attr('href').match(/\/fa\/news\/(\d+)/);
                                            }
                                        var postContent = $('.body').html();

                                        var  post = {
                                            title:title,
                                            postId:postId[1],
                                            content:postContent,
                                            created:new Date()
                                        }
                                        savePost(post,function(err,msg){
                                            if(err){
                                                console.log(err);
                                            }else{
                                                console.log(msg);
                                            }
                                        })
                                        // save tags
                                        $('.tags_item').each(function(item){
                                            var myData = {
                                                tagName:$(this).text(),
                                                created:new Date()
                                            }
                                            saveTags(myData,function(err,msg){
                                                if(err){
                                                    console.log(err)
                                                }else{
                                                    console.log(msg)
                                                }
                                            })
                                        })//end save tags

                                        // save images
                                        $('.body img').each(function(item){
                                                var image = $(this).attr('src');
                                                var myImages = {
                                                    image:image,
                                                    alt:title,
                                                    imageID:imageID,
                                                    created:new Date()
                                                }   
                                                saveImages(myImages,function(err,msg){
                                                    if(err){
                                                        console.log(err)
                                                    }else{
                                                        console.log(msg)
                                                    }
                                                })
                                            })// end of save images 



                                    }
                                }
                        }) // end of request for tags
                    }// end of ($(this).attr('href'))
                    })
                }
                callback();
            }   
        })// emd of requset for news list


        count++;

    },
    function (err) {

        console.log("shit is done")
    }
); 
var计数=1;
异步的(
函数(){
返回计数<2412;
},
函数(回调){
请求({
url:“http://www.domain.com/limit/100/page/“+伯爵,
方法:“获取”
},
功能(错误、响应、正文){
如果(!error&&response.statusCode==200){
如果(正文){
$=cheerio.load(车身);
$('.linear_news a')。每个(函数(项){
console.log($(this.attr('href'))
if($(this.attr('href')){
请求({
url:encodeURI(“http://www.domain.com“+$(this.attr('href')),
方法:“获取”
},
功能(错误、响应、正文1){
如果(!error&&response.statusCode==200){
如果(正文){
$=cheerio.load(车身1);
var title=$('.title a').text();
if($('head>base').attr('href')){
var postId=$('head>base').attr('href').match(/\/fa\/news\/(\d+)/);
}
var postContent=$('.body').html();
var post={
标题:标题,,
postId:postId[1],
内容:后内容,
创建日期:新日期()
}
savePost(post,函数(err,msg){
如果(错误){
控制台日志(err);
}否则{
控制台日志(msg);
}
})
//保存标签
$('.tags_item')。每个(函数(项){
var myData={
标记名:$(this).text(),
创建日期:新日期()
}
saveTags(myData,函数(err,msg){
如果(错误){
console.log(错误)
}否则{
控制台日志(msg)
}
})
})//结束保存标记
//保存图像
$('.body img')。每个(功能(项){
var image=$(this.attr('src');
var myImages={
图像:图像,
备选:标题,
imageID:imageID,
创建日期:新日期()
}   
保存图像(myImages,函数(err,msg){
如果(错误){
console.log(错误)
}否则{
控制台日志(msg)
}
})
})//保存图像结束
}
}
})//标记请求结束
}//结束($(this.attr('href'))
})
}
回调();
}   
})//新闻列表需求的emd
计数++;
},
功能(err){
console.log(“大便结束了”)
}
);