Node.js getaddrinfo ENOTFOUND

Resuelto Vineet Kosaraju asked hace 11 años • 19 respuestas

Al usar Node.js para intentar obtener el contenido html de la siguiente página web:

eternagame.wikia.com/wiki/EteRNA_Dictionary

Obtuve el siguiente error:

events.js:72
    throw er; // Unhandled 'error' event
          ^
Error: getaddrinfo ENOTFOUND
    at errnoException (dns.js:37:11)
    at Object.onanswer [as oncomplete] (dns.js:124:16)

Ya busqué este error en stackoverflow y me di cuenta de que se debe a que node.js no puede encontrar el servidor desde DNS (creo). Sin embargo, no estoy seguro de por qué sucede esto, ya que mi código funciona perfectamente en www.google.com.

Aquí está mi código (prácticamente copiado y pegado de una pregunta muy similar, excepto que se cambió el host):

var http = require("http");

var options = {
    host: 'eternagame.wikia.com/wiki/EteRNA_Dictionary'
};

http.get(options, function (http_res) {
    // initialize the container for our data
    var data = "";

    // this event fires many times, each time collecting another piece of the response
    http_res.on("data", function (chunk) {
        // append this chunk to our growing `data` var
        data += chunk;
    });

    // this event fires *one* time, after all the `data` events/chunks have been gathered
    http_res.on("end", function () {
        // you can use res.send instead of console.log to output via express
        console.log(data);
    });
});

Aquí está la fuente de donde copié y pegué: ¿Cómo realizar llamadas a servicios web en Expressjs?

No estoy usando ningún módulo con node.js.

Gracias por leer.

Vineet Kosaraju avatar Jul 17 '13 10:07 Vineet Kosaraju
Aceptado

En la documentación del módulo Node.js : http://nodejs.org/api/http.html#http_http_request_options_callbackHTTP

Puede llamar a http.get('http://eternagame.wikia.com/wiki/EteRNA_Dictionary', callback), y luego se analiza la URL con url.parse(); o llamar http.get(options, callback), ¿dónde optionsestá?

{
  host: 'eternagame.wikia.com',
  port: 8080,
  path: '/wiki/EteRNA_Dictionary'
}

Actualizar

Como se indica en el comentario de @EnchanterIO, el portcampo también es una opción separada; y el protocolo http://no debe incluirse en el hostcampo. Otras respuestas también recomiendan el uso del httpsmódulo si se requiere SSL.

yuxhuang avatar Jul 17 '2013 05:07 yuxhuang

Otra fuente común de error para

Error: getaddrinfo ENOTFOUND
    at errnoException (dns.js:37:11)
    at Object.onanswer [as oncomplete] (dns.js:124:16)

está escribiendo el protocolo (https, https, ...) al configurar la hostpropiedad enoptions

  // DON'T WRITE THE `http://`
  var options = { 
    host: 'http://yoururl.com',
    path: '/path/to/resource'
  }; 
j-- avatar Feb 07 '2015 17:02 j--