Узел.js getaddrinfo ENOTFOUND



при использовании узла.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

896   16  

16 ответов:

In узел.jsHTTP документация модуля: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:// не должны быть включены в

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

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(); линия, я смог избавиться от ошибки и работал штрафа для меня.

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

$ 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

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

Я получил эту ошибку при переходе из среды разработки в рабочую среду. Я был одержим тем, чтобы положить 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

Comments

    Ничего не найдено.