2013-07-04 8 views
6

Sto usando Node v0.10.11 su Ubuntu 12.04. Non riesco a capire cosa mi manca per far funzionare flussi di url con il modulo di richiesta. Questo programma sta cercando di accedere a un sito di mailing list, trovare i collegamenti per il download per ogni mese, quindi scaricare le pagine per ogni mese.Lancio richiesta nodo: Errore: URI non valido "www.urlworksinbrowser.com" o options.uri è un argomento obbligatorio

Il readme di mikeal dice "Il primo argomento può essere un url o un oggetto opzioni L'unica opzione richiesta è uri, tutti gli altri sono opzionali. parse() "

Se chiamo url.parse (www.targeturl.com), ottengo [Errore: options.uri è un argomento obbligatorio] Se non uso url.parse, ottengo [Errore : URI non valido "www.freelists.org/archive/si-list/06-2013"] (questo collegamento funziona perfettamente nei miei browser)

Ho ridotto il codice a 42 righe. Qualche consiglio benvenuto

var request = require('request'), 
    url = require('url'), 
    stream = require('stream'), 
    cheerio = require('cheerio'), // a reduced jQuery style DOM library 
    Transform = require('stream').Transform 

var DomStripStream = function(target) { 
    this.target = target; 
    stream.Transform.call(this,{objectMode: true}); 
} 
DomStripStream.prototype = Object.create(
    Transform.prototype, {constructor: {value: DomStripStream}} 
) 
DomStripStream.prototype.write = function() { 
    this._transform.apply(this, arguments); 
}; 
DomStripStream.prototype.end = function() { 
    this._transform.apply(this, arguments); 
    this.emit("end"); 
}; 

DomStripStream.prototype._transform = function(chunk, encoding, callback) { 
    chunk = chunk ? chunk.toString() : ""; 
    $ = cheerio.load(chunk); 
    domLinks = $(this.target); 
    $(domLinks).each(function (i, link) { 
    currLink = 'www.freelists.org' + $(link).attr('href') 
// currLink = url.parse(currLink) 
    request(currLink, function (error, response, body) { 
     console.log(error); 
    }) 
    }); 
} 

var fs = require("fs"), 
    output = fs.createWriteStream("out.txt"), 
    mainPage = new DomStripStream('td a') 

request('http://www.freelists.org/archive/si-list'). 
pipe(mainPage). 
pipe(output); 
+1

Fai http: // o https: // nell'URL – user568109

risposta

13

add http: // o https: // nell'URL

+2

ummm, come si fa mostriamo la radice del URL? Conosco il percorso, ma la radice è diversa se sono in sviluppo o produzione ... quindi sarà http: // {root} /path....I non posso semplicemente passarlo http: // path .. .. –

+0

Controllare 'document.location', contiene il campo' protocol'. [MDN] (https://developer.mozilla.org/en-US/docs/Web/API/Document/location) – Laoujin