2011-06-09 15 views
20

Estoy tratando de leer el contenido de una URL con Node.js, pero todo lo que parece obtener es un grupo de bytes. Obviamente estoy haciendo algo mal, pero no estoy seguro de qué. Este es el código que tengo actualmente:Leyendo contenido de URL con Node.js

var http = require('http'); 

var client = http.createClient(80, "google.com"); 
request = client.request(); 
request.on('response', function(res) { 
    res.on('data', function(data) { 
     console.log(data); 
    }); 
}); 
request.end(); 

Cualquier observación sería muy apreciada.

Respuesta

24

tratar de usar el evento on error del cliente para encontrar el problema.

var http = require('http'); 

var options = { 
    host: 'google.com', 
    path: '/' 
} 
var request = http.request(options, function (res) { 
    var data = ''; 
    res.on('data', function (chunk) { 
     data += chunk; 
    }); 
    res.on('end', function() { 
     console.log(data); 

    }); 
}); 
request.on('error', function (e) { 
    console.log(e.message); 
}); 
request.end(); 
7

el objeto de datos es un búfer de bytes. Simplemente llame .toString() para obtener el código legible:

console.log(data.toString()); 

referencia: Node.js buffers

+1

Otra opción es 'console.log (JSON.stringify (datos));' De lo contrario, he encontrado 'NPM instalar eyes' ser un útil herramienta para su 'inspector()'. – Dave

2

HTTP y HTTPS:

const getScript = (url) => { 
    return new Promise((resolve, reject) => { 
     const http  = require('http'), 
       https  = require('https'); 

     let client = http; 

     if (url.toString().indexOf("https") === 0) { 
      client = https; 
     } 

     client.get(url, (resp) => { 
      let data = ''; 

      // A chunk of data has been recieved. 
      resp.on('data', (chunk) => { 
       data += chunk; 
      }); 

      // The whole response has been received. Print out the result. 
      resp.on('end',() => { 
       resolve(data); 
      }); 

     }).on("error", (err) => { 
      reject(err); 
     }); 
    }); 
}; 

(async (url) => { 
    console.log(await getScript(url)); 
})('https://sidanmor.com/');