error - Node.js getaddrinfo ENOTFOUND
getaddrinfo enotfound request (16)
Creo que http realiza una solicitud en el puerto 80, aunque mencioné la url de host completa en el objeto de opciones. Cuando ejecuté la aplicación de servidor que tiene la API, en el puerto 80, que estaba ejecutando previamente en el puerto 3000, funcionó. Tenga en cuenta que para ejecutar una aplicación en el puerto 80 necesitará privilegios de root.
Error with the request: getaddrinfo EAI_AGAIN localhost:3000:80
Aquí hay un fragmento de código completo
var http=require(''http'');
var options = {
protocol:''http:'',
host: ''localhost'',
port:3000,
path: ''/iso/country/Japan'',
method:''GET''
};
var callback = function(response) {
var str = '''';
//another chunk of data has been recieved, so append it to `str`
response.on(''data'', function (chunk) {
str += chunk;
});
//the whole response has been recieved, so we just print it out here
response.on(''end'', function () {
console.log(str);
});
}
var request=http.request(options, callback);
request.on(''error'', function(err) {
// handle errors with the request itself
console.error(''Error with the request:'', err.message);
});
request.end();
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 esto se debe a que node.js no puede encontrar el servidor desde DNS (creo). Sin embargo, no estoy seguro de por qué esto sería así, 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 con el host cambiado):
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 donde copié y pegué: ¿Cómo hacer llamadas al servicio web en Expressjs?
No estoy usando ningún módulo con node.js.
Gracias por leer,
Vineet
En la documentación del módulo HTTP
Node.js : http://nodejs.org/api/http.html#http_http_request_options_callback
Puedes llamar a http.get(''http://eternagame.wikia.com/wiki/EteRNA_Dictionary'', callback)
, la URL se analiza con url.parse()
; o llame a http.get(options, callback)
, donde están las options
{
host: ''eternagame.wikia.com'',
path: ''/wiki/EteRNA_Dictionary''
}
La solución a este error para mí fue instalar http con el administrador de paquetes de nodo:
npm install http-server -g
Lo intenté utilizando el módulo de solicitud y pude imprimir el cuerpo de esa página con bastante facilidad. Desafortunadamente con las habilidades que tengo, no puedo ayudar más que eso.
Me deshice de http y slash extra (/). Acabo de usar este ''node-test.herokuapp.com'' y funcionó.
Mi problema era que mi servicio de DNS OS X (Mavericks) necesitaba ser rebooted .
Obtuve este error al pasar del entorno de desarrollo al entorno de producción. Estaba obsesionado con poner https://
en todos los enlaces. Esto no es necesario, por lo que puede ser una solución para algunos.
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 propiedad del host
en options
// DON''T WRITE THE `http://`
var options = {
host: ''http://yoururl.com'',
path: ''/path/to/resource''
};
Recibí el mismo error y lo utilicé debajo del enlace para obtener ayuda:
https://nodejs.org/api/http.html#http_http_request_options_callback
No estaba teniendo en mi código:
req.end();
(NodeJs V: 5.4.0) una vez agregado arriba de req.end();
línea, pude deshacerme del error y funcionó bien para mí.
Resolví este problema eliminando caracteres no deseables de la contraseña para la conexión. Por ejemplo, tuve estos caracteres: <##% y causó el problema (probablemente la etiqueta hash fue la causa raíz del problema).
Si aún se encuentra en proceso de finalización de pago para la configuración del proxy, para mí era la configuración del proxy la que faltaba y no podía realizar la solicitud porque los http / https directos están bloqueados. Así que configuré el proxy de mi organización mientras hacía la solicitud.
npm install https-proxy-agent
or
npm install http-proxy-agent
const httpsProxyAgent = require(''https-proxy-agent'');
const agent = new httpsProxyAgent("http://yourorganzation.proxy.url:8080");
const options = {
hostname: ''encrypted.google.com'',
port: 443,
path: ''/'',
method: ''GET'',
agent: agent
};
Si necesita usar https, entonces use la biblioteca https
https = require(''https'');
// options
var options = {
host: ''eternagame.wikia.com'',
path: ''/wiki/EteRNA_Dictionary''
}
// get
https.get(options, callback);
Solucioné este error con esto
$ npm info express --verbose
# Error message: npm info retry will retry, error on last attempt: Error: getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443
$ nslookup registry.npmjs.org
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
registry.npmjs.org canonical name = a.sni.fastly.net.
a.sni.fastly.net canonical name = prod.a.sni.global.fastlylb.net.
Name: prod.a.sni.global.fastlylb.net
Address: 151.101.32.162
$ sudo vim /etc/hosts
# Add "151.101.32.162 registry.npmjs.org` to hosts file
$ npm info express --verbose
# Works now!
Fuente original: https://github.com/npm/npm/issues/6686
Tenga en cuenta que este problema también puede ocurrir si el dominio al que hace referencia deja de funcionar (por ejemplo, ya no existe).
en las opciones para la solicitud HTTP, cambie a
var options = { host: ''eternagame.wikia.com'',
path: ''/wiki/EteRNA_Dictionary'' };
Creo que eso solucionará tu problema.
var http=require(''http'');
http.get(''http://eternagame.wikia.com/wiki/EteRNA_Dictionary'', function(res){
var str = '''';
console.log(''Response is ''+res.statusCode);
res.on(''data'', function (chunk) {
str += chunk;
});
res.on(''end'', function () {
console.log(str);
});
});