Node.js getaddrinfo ENOTFOUND

Lorsque vous utilisez Node.js pour essayer d’obtenir le contenu HTML de la page Web suivante:

eternagame.wikia.com/wiki/EteRNA_Dictionary

Je reçois l’erreur suivante:

 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) 

J’ai déjà recherché cette erreur sur stackoverflow, et j’ai réalisé que c’est parce que node.js ne peut pas trouver le serveur de DNS (je pense). Cependant, je ne suis pas sûr de savoir pourquoi, car mon code fonctionne parfaitement sur www.google.com .

Voici mon code (pratiquement copié et collé à partir d’une question très similaire, sauf avec l’hôte modifié):

 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); }); }); 

Voici la source à partir de laquelle j’ai copié et collé: Comment faire des appels de service Web dans Expressjs?

Je n’utilise aucun module avec node.js.

Merci d’avoir lu,

Vineet

Dans la documentation du module HTTP Node.js : http://nodejs.org/api/http.html#http_http_request_options_callback

Vous pouvez soit appeler http.get('http://eternagame.wikia.com/wiki/EteRNA_Dictionary', callback) , l’URL est alors analysée avec url.parse() ; ou appelez http.get(options, callback) , où options est

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

Mettre à jour

Comme indiqué dans le commentaire de @EnchanterIO, le champ port est également une option distincte; et le protocole http:// ne doit pas être inclus dans le champ host . D’autres réponses recommandent également l’utilisation du module https si SSL est requirejs.

Une autre source d’erreur commune pour

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

écrit le protocole (https, https, …) lors de la définition de la propriété host dans les options

  // DON'T WRITE THE `http://` var options = { host: 'http://yoururl.com', path: '/path/to/resource' }; 

dans les options pour la requête HTTP, basculez-le sur

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

Je pense que ça va régler ton problème.

  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); }); }); 

Si vous devez utiliser https, utilisez la bibliothèque https

 https = require('https'); // options var options = { host: 'eternagame.wikia.com', path: '/wiki/EteRNA_Dictionary' } // get https.get(options, callback); 

Mon problème était que mon service DNS OS X (Mavericks) devait être redémarré .

Notez que ce problème peut également se produire si le domaine que vous référencez tombe en panne (par exemple, n’existe plus.)

Je pense que http fait la demande sur le port 80, même si j’ai mentionné l’URL complète de l’hôte dans l’object options. Lorsque je lance l’application serveur dotée de l’API, sur le port 80, que j’exécutais précédemment sur le port 3000, cela fonctionnait. Notez que pour exécuter une application sur le port 80, vous aurez besoin des privilèges root.

Error with the request: getaddrinfo EAI_AGAIN localhost:3000:80

Voici un extrait de code complet

 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(); 

Je recevais la même erreur et j’ai utilisé le lien ci-dessous pour obtenir de l’aide:

https://nodejs.org/api/http.html#http_http_request_options_callback

Je n’avais pas dans mon code:

req.end();

(NodeJs V: 5.4.0) une fois ajouté au-dessus de req.end(); ligne, j’ai été en mesure de se débarrasser de l’erreur et a bien fonctionné pour moi.

J’ai corrigé cette erreur avec ceci

 $ 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! 

Source originale: https://github.com/npm/npm/issues/6686

Je l’ai essayé avec le module de requête et j’ai pu facilement imprimer le corps de cette page. Malheureusement, avec les compétences que j’ai, je ne peux pas aider autrement.

J’ai eu cette erreur en passant de l’environnement de développement à l’environnement de production. J’étais obsédé par le fait de mettre https:// sur tous les liens. Ce n’est pas nécessaire, donc cela peut être une solution pour certains.

Je me suis débarrassé de http et du slash supplémentaire (/). Je viens d’utiliser ce ‘node-test.herokuapp.com’ et ça a fonctionné.

Si vous êtes toujours confronté à la configuration du proxy, pour moi, ce sont les parameters du proxy qui manquaient et qui n’ont pas pu faire la demande car les http / https directs sont bloqués. J’ai donc configuré le proxy de mon organisation lors de la demande.

 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 }; 

J’ai résolu ce problème en supprimant les caractères non souhaitables du mot de passe pour la connexion. Par exemple, j’avais ces caractères: < ##% et cela a causé le problème (le plus probablement le tag de hachage était la cause du problème).

La solution à cette erreur pour moi était d’installer http avec le gestionnaire de paquets de noeuds:

 npm install http-server -g