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.

379voto

felixwong8 Punkte 5109

In Node.js HTTP Modul-Dokumentation: http://nodejs.org/api/http.html#http_http_request_options_callback

Sie können entweder http.get('http://eternagame.wikia.com/wiki/EteRNA_Dictionary', callback) aufrufen, wobei die URL dann mit url.parse() analysiert wird; oder http.get(options, callback) aufrufen, wobei options ist

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

Aktualisierung

Wie im Kommentar von @EnchanterIO angegeben, ist das port Feld ebenfalls eine separate Option; und das Protokoll http:// sollte nicht im host Feld enthalten sein. Andere Antworten empfehlen auch die Verwendung des https Moduls, wenn SSL erforderlich ist.

284voto

Jorge Bucaran Punkte 5358

Ein weiterer häufiger Fehlerquellen ist das Schreiben des Protokolls (https, https, ...) beim Setzen der host-Eigenschaft in options

  // SCHREIBE NICHT DAS `http://`
  var options = { 
    host: 'http://deineurl.com',
    path: '/pfad/zum/ressource'
  };

25voto

aaaidan Punkte 6713

Mein Problem war, dass mein OS X (Mavericks) DNS-Dienst neu gestartet werden musste. Auf Catalina und Big Sur kann der DNS-Cache mit folgendem Befehl geleert werden:

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

Ältere macOS-Versionen siehe hier.

22voto

Russbear Punkte 1261

In den Optionen für die HTTP-Anfrage, setzen Sie es auf

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

Ich denke, das wird Ihr Problem lösen.

12voto

Andrew Punkte 3417

Wenn Sie https verwenden müssen, verwenden Sie das https-Bibliothek

https = require('https');

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

// erhalten
https.get(options, callback);

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