1. ホーム
  2. node.js

[解決済み] Node.js getaddrinfo ENOTFOUND

2022-03-11 13:26:41

質問

Node.jsを使って、以下のWebページのhtmlの内容を取得しようとした場合。

eternagame.wikia.com/wiki/EteRNA_Dictionary

以下のようなエラーが発生します。

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)

このエラーをstackoverflowで調べたところ、node.jsがDNSからサーバーを見つけられないからだとわかりました(と思う)。しかし、私のコードは、DNSで完全に動作するため、なぜそうなるのかわかりません。 www.google.com .

以下は私のコードです(ホストを変更した以外は、非常に類似した質問から実質的にコピー&ペーストしたものです)。

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

以下は、私がコピー&ペーストしたソースです。 ExpressjsでWebサービス呼び出しを行うには?

node.jsでモジュールを使っていないのですが、どうすればいいですか?

お読みいただきありがとうございます。

どのように解決するのですか?

Node.js HTTP モジュールのドキュメントです。 http://nodejs.org/api/http.html#http_http_request_options_callback

のどちらかを呼び出すことができます。 http.get('http://eternagame.wikia.com/wiki/EteRNA_Dictionary', callback) で解析され、そのURLは url.parse() を呼び出すか、または http.get(options, callback) ここで options

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

更新情報

EnchanterIO さんのコメントにあるように port フィールドも別のオプションであり、プロトコルの http:// に含めるべきではありません。 host フィールドを使用します。他の回答でも https モジュールは、SSLが必要な場合に使用します。