Узел.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 и понял, что это потому, что узел.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?

Я не использую какие-либо модули с узлом.js.

Спасибо за чтение,

Vineet

16 ответов


на узел.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 is

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

обновление

как указано в комментарии @EnchanterIO,port поле также является отдельной опцией; и протокол http:// не должно быть включено в


еще один распространенный источник ошибок

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

моя проблема заключалась в том, что моя служба DNS OS X (Mavericks) должна была быть перезагружается.


обратите внимание, что эта проблема также может возникнуть, если домен, на который вы ссылаетесь идет вниз (например. уже не существовать.)


Я думаю, что http делает запрос на порт 80, хотя я упомянул полный url-адрес хоста в объекте options. Когда я запускаю серверное приложение, которое имеет API, на порту 80, который я запускал ранее на порту 3000, он работал. Обратите внимание, что для запуска приложения на порт 80 вам потребуется root-привилегий.

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

Я получал ту же ошибку и использовал ниже ссылку, чтобы получить помощь:

https://nodejs.org/api/http.html#http_http_request_options_callback

у меня не было в мой код:

req.end();

(NodeJs V: 5.4.0) после добавления выше req.end(); line, я смог избавиться от ошибки и отлично работал для меня.


я исправил эту ошибку с помощью этого

$ npm info express --verbose
# Error message: npm info retry will retry, error on last attempt: Error: 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 
# Add "151.101.32.162 registry.npmjs.org` to hosts file
$ npm info express --verbose
# Works now!

источник: https://github.com/npm/npm/issues/6686


Я попробовал использовать запрос модуль, и смог распечатать тело этой страницы довольно легко. К сожалению, с моими навыками, я ничем не могу помочь.


Я получил эту ошибку при переходе из среды разработки в рабочую среду. Я был одержим putting https:// по всем ссылкам. В этом нет необходимости, поэтому это может быть решением для некоторых.


Я избавился от http и дополнительной косой черты (/). Я просто использовал это node-test.herokuapp.com и это сработало.


Если вы все еще сталкиваетесь с проверкой для настройки прокси, для меня это была настройка прокси, которая отсутствовала и не смогла сделать запрос, поскольку прямые http/https заблокированы. Поэтому я настроил прокси-сервер из своей организации, делая запрос.

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

Я получил эту проблему решена путем удаления нежелательных символов из пароля для подключения. Например, у меня были следующие символы:


решение этой ошибки для меня было установить адресу http С менеджером пакетов узлов:

npm install http-server -g