Подтвердить что ты не робот

Ошибка: getaddrinfo ENOTFOUND в nodejs для вызова

Я запускаю веб-сервер на node, код которого приведен ниже

var restify = require('restify');

var server = restify.createServer();

var quotes = [
  { author : 'Audrey Hepburn', text : "Nothing is impossible, the word itself says 'I'm possible'!"},
  { author : 'Walt Disney', text : "You may not realize it when it happens, but a kick in the teeth may be the best thing in the world for you"},
  { author : 'Unknown', text : "Even the greatest was once a beginner. Don't be afraid to take that first step."},
  { author : 'Neale Donald Walsch', text : "You are afraid to die, and you're afraid to live. What a way to exist."}
];

server.get('/', function(req, res) {
  res.json(quotes);
});

server.get('/quote/random', function(req, res) {
  var id = Math.floor(Math.random() * quotes.length);
  var q = quotes[id];
  res.json(q);
});

server.get('/quote/:id', function(req, res) {
  if(quotes.length <= req.params.id || req.params.id < 0) {
    res.statusCode = 404;
    return res.send('Error 404: No quote found');
  }

  var q = quotes[req.params.id];
  res.json(q);
});

server.listen(process.env.PORT || 3011);

И тогда я хочу сделать запрос на получение в следующем коде

var https = require('http');

/**
 * HOW TO Make an HTTP Call - GET
 */
// options for GET
var optionsget = {
    host : 'http://localhost',
    port : 3010,
    path : '/quote/random', // the rest of the url with parameters if needed
    method : 'GET' // do GET
};

console.info('Options prepared:');
console.info(optionsget);
console.info('Do the GET call');

// do the GET request
var reqGet = https.request(optionsget, function(res) {
    console.log("statusCode: ", res.statusCode);
    // uncomment it for header details
//  console.log("headers: ", res.headers);


    res.on('data', function(d) {
        console.info('GET result:\n');
        process.stdout.write(d);
        console.info('\n\nCall completed');
    });

});

reqGet.end();
reqGet.on('error', function(e) {
    console.error(e);
});

Я только начинаю с node, и я даже не знаю, правильно ли это. Я хочу проверить производительность экспресс и restify.I сделал тест теста apache для кода сервера, который я написал, и нашел противоречивые результаты, которые лучше восстанавливаются. Так что я хочу еще немного проверить, совершив звонки на удаленные службы, а затем позже прочитайте, напишите в mongodb. Этот код является отправной точкой. Я получаю сообщение об ошибке

{ [Error: getaddrinfo ENOTFOUND] code: 'ENOTFOUND', errno: 'ENOTFOUND', syscall: 'getaddrinfo' }

По крайней мере, заголовок в направлении записи? Каков правильный путь к те испытаниям, которые я хочу? Почему я получил результат быстрее, чем экспресс? Может ли кто-нибудь привести меня к лучшим учебным пособиям для начинающих для приложения в node/express/backbone и mongodb?

4b9b3361

Ответ 1

getaddrinfo ENOTFOUND означает, что клиент не смог подключиться к данному адресу. Пожалуйста, попробуйте указать хост без http:

var optionsget = {
    host : 'localhost',
    port : 3010,
    path : '/quote/random', // the rest of the url with parameters if needed
    method : 'GET' // do GET
};

Что касается учебных ресурсов, вы не ошибетесь, если начнете с http://www.nodebeginner.org/, а затем прочитаете хорошую книгу, чтобы получить более глубокие знания - я рекомендую Professional Node.js, но многие там.

Ответ 2

для меня это было потому, что в файле /etc/hosts имя хоста не добавлено

Ответ 3

Проверьте файл хоста, который выглядит следующим образом

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1   localhost
255.255.255.255 broadcasthost

Ответ 4

Я не могу объяснить, почему, но изменение параметра url с localhost до 127.0.0.1 на mongodb.MongoClient.connect() метод в Windows 10 решило проблему.

Ответ 5

У меня также была такая же проблема, и я исправил ее с помощью правильного прокси. Если вы используете прокси-сеть, дважды проверьте настройки прокси-сервера.

Надеюсь, это поможет вам -

Ответ 6

У меня такая же проблема с сервером Amazon, я меняю код на этот

var connection = mysql.createConnection({
    localAddress     : '35.160.300.66',
    user     : 'root',
    password : 'root',
    database : 'rootdb',
});

проверить модуль mysql node https://github.com/mysqljs/mysql

Ответ 7

Когда я попытался установить новое ионное приложение, я получил ту же ошибку, как показано ниже: Я перепробовал множество источников и обнаружил, что ошибка, допущенная в пользовательской среде и системной среде, без необходимости включала значение PROXY. Я удалил '' 'пользовательские переменные HTTP://хост: порт PROXY

Системные переменные http_proxy http://имя пользователя: пароль @хост: порт '' '' и теперь он работает без проблем.

[ERROR] Network connectivity error occurred, are you offline?

        If you are behind a firewall and need to configure proxy settings, see: https://ion.link/cli-proxy-docs

        Error: getaddrinfo ENOTFOUND host host:80

Ответ 8

var http = require('http');

  var options = {     
      host: 'localhost',
      port: 80,
      path: '/broadcast'
    };

  var requestLoop = setInterval(function(){

      http.get (options, function (resp) {
        resp.on('data', function (d) {
          console.log ('data!', d.toString());
        });
        resp.on('end', function (d) {
           console.log ('Finished !');
        });
      }).on('error', function (e) {
          console.log ('error:', e);
      });
  }, 10000);

var dns = require('dns'), cache = {};
dns._lookup = dns.lookup;
dns.lookup = function(domain, family, done) {
    if (!done) {
        done = family;
        family = null;
    }

    var key = domain+family;
    if (key in cache) {
        var ip = cache[key],
            ipv = ip.indexOf('.') !== -1 ? 4 : 6;

        return process.nextTick(function() {
            done(null, ip, ipv);
        });
    }

    dns._lookup(domain, family, function(err, ip, ipv) {
        if (err) return done(err);
        cache[key] = ip;
        done(null, ip, ipv);
    });
};

// Works fine (100%)

Ответ 9

Я столкнулся с одной и той же проблемой, и после некоторых проб и ошибок выяснилось, что моя настройка hosts создала проблему.

My localhost DNS был перезаписан, и из-за этого простое ping не удалось:

$ ping http://localhost
# ping: cannot resolve http://localhost: Unknown host

Как только я решил конфигурацию файла /private/etc/hosts, pinging localhost успешно работал и больше не получал ошибку, которую вы видели:

# Fatal error: getaddrinfo ENOTFOUND

Ответ 10

Чтобы устранить ошибку:

[Ошибка: getaddrinfo ENOTFOUND] код: 'ENOTFOUND', errno: 'ENOTFOUND', syscall: 'getaddrinfo'} "

вам просто нужно включить подключение к Интернету.