2016-09-21 15 views
0

我试图从yelp中删除并附加了下面的代码。我在将数据存储到数组中时遇到问题。响应后,阵列推动需要在节点JS中永远存在

这里是我的代码:

... 
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... 
     });   
    } 
}); 

所以每当我尝试将数据推到阵列,它只是不工作,一直等下去。如果我删除推送,它将调节所有数据。

我也试过每个代替过滤器,但没有运气。还试图把手动放入数组索引,仍然没有工作。我可以知道我在代码中做错了什么吗?

UPDATE

我已经在页面的顶部添加了此。

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

'title.push' - 但你没有指定什么'title' - 应该不是代码来失败'不能得到财产从未定义的推? – vlaz

+0

我已经将它定义为var title = []; –

+0

'我已经在页面的顶部添加了这个.'但是标题还没有定义。只有'电话'被分配给一个新的数组,所有其他变量只是声明,否则不会被初始化.. – vlaz

回答

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将有元素的数量。

0

push将无法​​正常工作until分配title为数组类型

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!') 
     }) 
+0

嘿,是的,它适用于title = [],我的不好,但我已经初始化它在页面的顶部,只是更新了代码。 –

+0

你还没有分配标题作为数组 – abdulbarik

+0

嘿,是的,明白了,我的坏。感谢您指出错误。 –