2016-09-21 30 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

嘿,是的,明白了,我的壞。感謝您指出錯誤。 –