Узел.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
16 ответов:
In узел.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://не должны быть включены в
еще один распространенный источник ошибок
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