2013-12-08 32 views
1

時,我有以下代碼:空體使用請求

var request = require('request'); 
var cheerio = require('cheerio'); 
var URL = require('url') 
var fs = require('fs') 
fs.readFile("urls.txt", 'utf8', function(err, data) { 
    if (err) throw err; 
    var urls = data.split('\n'); 
    urls = urls.filter(function(n){return n}); 
    for(var i in urls) { 
     request(urls[i], function(err, resp, body) { 
      if (err) 
       throw err; 
      $ = cheerio.load(body,{lowerCaseTags: true, xmlMode: true}); 
      $('item').each(function(){ 
       console.log("----------"); 
       console.log($(this).find('title').text()); 
       console.log($(this).find('link').text()); 
       console.log($(this).find('pubDate').text()); 
      }); 
     }).end(); 
    } 
}); 

並從urls.txt文件我只有下面的網址:

http://www.visir.is/section/?Template=rss&mime=xml

當我使用wget在那個URL上我得到一個響應,看起來像一個rss feed,但是當我在上面的代碼中執行它時,它是空的。有人可以向我解釋爲什麼以及如何解決這個問題?

+0

'.END()'是多餘的,你可以將其刪除,並檢查? – vmx

+0

此外,請求操作是異步的,您的for循環可能無法按預期工作。使用[異步](https://github.com/caolan/async)模塊以適合的方式加載串聯/並行的url。 – vmx

回答

2

更新:只需從原始腳本工作中刪除.end()即可。 end()終止回調腳本。國際海事組織,在2016年,我肯定會選擇請求針。


Request是一個奇怪的鳥,爲什麼它不是在你的工作的情況下它都給予響應中的任何信息。

嘗試用Needle代替:

var needle = require('needle'); 
var cheerio = require('cheerio'); 
var URL = require('url') 
var fs = require('fs') 
fs.readFile("urls.txt", 'utf8', function(err, data) { 
    if (err) throw err; 
    var urls = data.split('\n'); 
    urls = urls.filter(function(n){return n}); 
    for(var i in urls) { 
     needle.get(urls[i], function(err, resp, body) { 
      if (err) 
       throw err; 
      $ = cheerio.load(body,{lowerCaseTags: true, xmlMode: true}); 
      $('item').each(function(){ 
       console.log("----------"); 
       console.log($(this).find('title').text()); 
       console.log($(this).find('link').text()); 
       console.log($(this).find('pubDate').text()); 
      }); 
     }); 
    } 
}); 
+0

感謝您的幫助! – Haffi112

+0

對我來說,當我將{follow:True}添加到針中的選項時,它工作正常。這使差異:) – Haffi112