数组推送在响应之后永远在Node JS中

时间:2016-09-21 18:58:49

标签: javascript node.js express request cheerio

我试图从yelp中刮掉并附上下面的代码。我在将数据存储到数组时遇到问题。

这是我的代码:

...
var id, title, link, neighborhood, address, phone = [];

router.get('/', function(req, res, next) {
var cheerio = require('cheerio');

while (scrapepage) {
    var options = {
        uri: 'https://www.yelp.co.uk/search?find_desc='+find+'&find_loc='+city+''+'&start='+page,
        transform: function (body) {
            return cheerio.load(body);
        }
    };

    page += 10;
    rp(options)
        .then(function ($) {


            var json = { id: "", title : "", link : "", neighborhood : "", address : "", phone : ""};                

            $('.biz-name span').filter(function(){
                var data = $(this).text();
                console.log(data);
                //title.push(data);
                title_count++;
            });

           ...

            res.send('Check your console!')
        })
        .catch(function (err) {
            // Crawling failed or Cheerio choked...
        });           
    }
});

因此,每当我尝试将数据推送到数组时,它就不起作用,永远等待。如果我删除推送,它会调用所有数据。

我也试过用而不是过滤器,但没有运气。还试图手动放入数组索引,仍然无法正常工作。我可以在代码中知道我做错了什么吗?

更新

我已在页面顶部添加了此内容。

var id, title, link, neighborhood, address, phone = []; 

2 个答案:

答案 0 :(得分:0)

我不得不问问题在哪里初始化?我看到了声明,但没有告诉系统将标题初始化为数组。

...
router.get('/', function(req, res, next) {
var cheerio = require('cheerio');

while (scrapepage) {
    var options = {
        uri: 'https://www.yelp.co.uk/search?find_desc='+find+'&find_loc='+city+''+'&start='+page,
        transform: function (body) {
            return cheerio.load(body);
        }
    };

    page += 10;
    rp(options)
        .then(function ($) {

            var title = [], 
                release, rating;
            var json = { id: "", title : "", link : "", neighborhood : "", address : "", phone : ""};                

            $('.biz-name span').filter(function(){
                var data = $(this).text();
                console.log(data);
                title.push(data);
                title_count++;
            });

          ...

            res.send('Check your console!')
        })
        .catch(function (err) {
            // Crawling failed or Cheerio choked...
        });           
    }
});

没有初始化,系统必须经历一个确定参数类型和兼容性的过程,以确保它能够让您尽可能接近您所要求的。有时显式定义变量可以加快这一过程。

同样,你不应该使用title_count作为title.length将拥有元素的数量。

答案 1 :(得分:0)

push无效untiltitle指定为数组类型

then(function ($) {

            var title=[];
            var release, rating;
            var json = { id: "", title : "", link : "", neighborhood : "", address : "", phone : ""};                

            $('.biz-name span').filter(function(){
                var data = $(this).text();
                console.log(data);
                title.push(data);
                title_count++;
            });

           ...

            res.send('Check your console!')
        })