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.

0voto

Uday Reddy Punkte 1157

Ich habe http und den zusätzlichen Schrägstrich (/) entfernt. Ich habe einfach 'node-test.herokuapp.com' benutzt und es hat funktioniert.

0voto

Ansar Ahmed Punkte 31

Wenn Sie immer noch Probleme mit dem Check-out aufgrund von Proxy-Einstellungen haben, waren es bei mir die Proxy-Einstellungen, die fehlten und ich konnte die Anfrage nicht direkt stellen, da HTTP/HTTPS blockiert sind. Daher habe ich den Proxy von meiner Organisation konfiguriert, während ich die Anfrage gestellt habe.

npm install https-proxy-agent 
oder 
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
};

0voto

Shota Punkte 6173

Ich habe dieses Problem gelöst, indem ich nicht erwünschte Zeichen aus dem Passwort für die Verbindung entfernt habe. Zum Beispiel hatte ich diese Zeichen: <##% und es hat das Problem verursacht (wahrscheinlich war das Doppelkreuz das Hauptproblem).

0voto

Arjun J Gowda Punkte 633

Mein Problem war, dass wir die URL analysierten und http_options für http.request() generierten;

Ich verwendete request_url.host, das bereits die Portnummer mit dem Domänennamen enthielt, daher musste ich request_url.hostname verwenden.

var request_url = new URL('http://example.org:4444/path');
var http_options = {};

http_options['hostname'] = request_url.hostname; // Wir haben request_url.host verwendet, das die Portnummer enthält
http_options['port'] = request_url.port;
http_options['path'] = request_url.pathname;
http_options['method'] = 'POST';
http_options['timeout'] = 3000;
http_options['rejectUnauthorized'] = false;

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