1. ホーム
  2. node.js

[解決済み] エラー: nodejs の get 呼び出しで getaddrinfo ENOTFOUND が発生しました。

2022-01-30 21:38:08

質問

私はノード上でウェブサーバを実行しています。

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

そして、次のコードで get リクエストを実行したい。

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を始めたばかりで、これが正しい方法なのかどうかさえわかりません。 私はexpressとrestifyのパフォーマンスをテストしたいのです。私が書いたサーバーコードに対してapacheベンチマークテストを行ったところ、restifyの方が良いという矛盾した結果が出ました。そこで、リモートサービスを呼び出して、後でmongodbに読み込み書き込みをして、もう少しテストしたいと思います。上記のコードが私の出発点です。

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

少なくとも書く方向には向かっているのでしょうか?私がしたい種類のテストへの正しい方法は何ですか?なぜexpressよりrestifyの方が早く結果が出たのでしょうか?このような場合、どのようにすればよいのでしょうか?

どのように解決するのですか?

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/ そして、より深い知識を得るために良い本を読んでください。 プロフェッショナルNode.js でも、世の中にはたくさんありますよ。