[node.js] Node.js getaddrinfo ENOTFOUND

Node.js를 사용하여 다음 웹 페이지의 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에서 서버를 찾을 수 없기 때문이라는 것을 깨달았습니다. 그러나 코드가 완벽하게 작동하기 때문에 왜 이것이 될지 잘 모르겠습니다 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에서 웹 서비스 호출을하는가?

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필드에 포함되어서는 안됩니다 . 다른 답변은 httpsSSL이 필요한 경우 모듈 사용을 권장 합니다.


답변

에 대한 또 다른 일반적인 오류 원인

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

속성을 설정할 때 프로토콜 (https, https, …)을 쓰고 host있습니다.options

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


답변

HTTP 요청에 대한 옵션에서

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

나는 그것이 당신의 문제를 해결할 것이라고 생각합니다.


답변

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

  });


답변

https를 사용해야하는 경우 https 라이브러리를 사용하십시오.

https = require('https');

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

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


답변

내 문제는 내 OS X (Mavericks) DNS 서비스를 재부팅 해야한다는 것 입니다.


답변

옵션 객체에서 완전한 호스트 URL을 언급했지만 http가 포트 80에서 요청한다고 생각합니다. 이전에 포트 3000에서 실행했던 포트 80에서 API가있는 서버 응용 프로그램을 실행할 때 작동했습니다. 포트 80에서 응용 프로그램을 실행하려면 루트 권한이 필요합니다.

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

다음은 완전한 코드 스 니펫입니다.

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