396 Stimmen

Node.js getaddrinfo ENOTFOUND

Bei der Verwendung von Node.js, um den HTML-Inhalt der folgenden Webseite abzurufen:

eternagame.wikia.com/wiki/EteRNA_Dictionary

erhalte ich folgenden Fehler:

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)

Ich habe diesen Fehler bereits auf Stackoverflow nachgeschlagen und festgestellt, dass dies daran liegt, dass Node.js den Server nicht über DNS finden kann (denke ich). Ich bin jedoch nicht sicher, warum das der Fall ist, da mein Code auf www.google.com perfekt funktioniert.

Hier ist mein Code (praktisch kopiert und eingefügt von einer sehr ähnlichen Frage, außer dass der Host geändert wurde):

var http = require("http");

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

http.get(options, function (http_res) {
    // initialisiere den Container für unsere Daten
    var data = "";

    // Dieses Ereignis wird viele Male ausgelöst, jedes Mal wird ein weiteres Stück der Antwort gesammelt
    http_res.on("data", function (chunk) {
        // füge diesen Chunk zu unserer wachsenden `data`-Variable hinzu
        data += chunk;
    });

    // Dieses Ereignis wird *einmal* ausgelöst, nachdem alle `data`-Ereignisse/Chunks gesammelt wurden
    http_res.on("end", function () {
        // Sie können res.send anstelle von console.log verwenden, um über Express auszugeben
        console.log(data);
    });
});

Hier ist die Quelle, von der ich kopiert und eingefügt habe: Wie macht man Webservice-Aufrufe in Expressjs?

Ich verwende keine Module mit Node.js.

Vielen Dank fürs Lesen.

11voto

sachin Punkte 13355
  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);
        });

  });

9voto

Mahtab Alam Punkte 1810

Ich denke, dass HTTP Anfragen auf Port 80 macht, obwohl ich die vollständige Host-URL im Options-Objekt angegeben habe. Als ich die Serveranwendung, die die API hat, auf Port 80 ausgeführt habe, die zuvor auf Port 3000 lief, funktionierte es. Beachten Sie, dass Sie Root-Rechte benötigen, um eine Anwendung auf Port 80 auszuführen.

Fehler bei der Anfrage: getaddrinfo EAI_AGAIN localhost:3000:80

Hier ist ein vollständiger Code-Schnipsel

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) {
        // Fehler bei der Anfrage behandeln
        console.error('Fehler bei der Anfrage:', err.message);        
});

request.end();

6voto

Mertcan Diken Punkte 14493

Ich habe diesen Fehler mit diesem behoben

$ npm info express --verbose
# Fehlermeldung: npm info retry wird erneut versuchen, Fehler beim letzten Versuch: Fehler: 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 
# Füge "151.101.32.162 registry.npmjs.org` zur hosts Datei hinzu
$ npm info express --verbose
# Funktioniert jetzt!

Ursprüngliche Quelle: https://github.com/npm/npm/issues/6686

4voto

Mauvis Ledford Punkte 37866

Beachten Sie, dass dieses Problem auch auftreten kann, wenn die Domain, auf die Sie verweisen, nicht mehr verfügbar ist (z. B. nicht mehr existiert).

3voto

Sterling Diaz Punkte 3548

In meinem Fall war das Problem eine fehlerhafte URL. Ich hatte doppelte Schrägstriche in der URL.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X