web-dev-qa-db-ja.com

エラー:getjsのgetjsinfo innodejsのget呼び出し

以下のコードが記載されているノードでWebサーバーを実行しています

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

私はノードから始めていますが、これが正しい方法であるかどうかさえ知りません。 ExpressとRestifyのパフォーマンスをテストしたいのですが、書いたサーバーコードに対してApacheベンチマークテストを行い、Restifyの方が矛盾する結果が見つかったので、リモートサービスを呼び出して後でテストする必要があります上記のコードは私の出発点です。エラーが発生しています

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

少なくとも書き込み方向に向かっていますか?私がしたい種類のテストへの正しい方法は何ですか?エクスプレスよりも速く結果を再取得したのはなぜですか? node/express/backboneおよびmongodbでのアプリケーションの最適な出発点チュートリアルに誰でも案内できますか?

43
nnm

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 ですが、たくさんあります。

82
Karol

私にとっては、/ etc/hostsファイルにホスト名が追加されていないためでした

14
Ben Kim

このようなホストファイルを確認してください

##
# 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
12
neoerol

理由を説明することはできませんが、Windows 10でmongodb.MongoClient.connect()メソッドでurlパラメータをlocalhostから127.0.0.1に変更することで問題を解決しました。

7
jay

私も同じ問題を抱えていたので、正しいプロキシを使用して修正しました。プロキシネットワークを使用している場合は、プロキシ設定を再確認してください。

これがあなたを助けることを願っています-

2
Naren Chejara

私はAmazonサーバーで同じ問題を抱えています

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

mysqlノードモジュールを確認します https://github.com/mysqljs/mysql

0
Adiii