DNSがマシンから適切に解決されていることを確認する必要があると思います。 ノードのドキュメント をチェックして、ドメインが解決可能であることを確認してください。
私はノードベースのプログラムを書いていますが、ユーザーは私に代わってhttprequestを行うように頼むことができます{もちろん、彼らは私にいくつかのデータと呼び出し方法を提供します}
getaddrinfo ENOENTこれは私のコードがどのように見えるかです
function makehttprequest(deviceid, httpaction, httppath,methods, actiondata, callback) {
console.log('we are here with httpaction' + httpaction + ' path ' + httppath + ' method ' + methods + ' action data ' + actiondata);
//do the http post work, get the data, and call the callback function with return data
var options = {
Host: httpaction,
port: 80,
path: httppath,
method: methods
};
try {
var req = http.request(options, function(res) {
console.log('STATUS: ' + res.statusCode);
console.log('HEADERS: ' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
});
} catch(e) {
console.log('error as : ' + e.message);
}
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
// write data to request body
console.log('writing data to request ..');
req.write(actiondata);
console.log('finished writing data to request…');
req.end();
console.log('request ended…');
}
これは、ホスト(httpactionとして渡す)の前にスキーム(「http://」)がある場合に発生します。ホストは、「 http://www.google.com 」や「www.google.com/hello-world」や「-」ではなく、「www.google.com」のようなドメインでなければなりません http://www.google.com/hello-world "。
ドメインだけにしてください。
次に例を示します。 http://allampersandall.blogspot.com/2012/03/nodejs-http-request-example.html
この問題は、末尾にスラッシュがある場合にも発生する可能性があります。
良い:"www.google.com"
悪い:"www.google.com/"
request
の代わりにhttp
モジュールを使用して、これらのホスト名/プロトコル/ポート/スラッシュの問題をすべて回避します
[エラー:Getaddrinfo ENOENT]が表示されていましたが、[エラー:EMFILEに接続]が表示された直後です。私は何千ものクライアントで負荷テストを行っているため、EMFILEエラー(根本原因)が隠されていました。解決策は EMFILEの場合と同じ :ファイル記述子の数を増やします。他の誰かが同じ問題を抱えている場合に備えて、ここに完全に追加してください。
私はばかげた間違いのために今日これを再度打った。これは、ポート番号がホスト名の一部として配置されたためです。
// wrong. gets error getaddrinfo ENOENT
var options = {
hostName: 'localhost:1337',
....
}
// correct
var options = {
hostname: 'localhost',
port: 1337,
};
ホストをローカルマシンに解決できなかったserver.listen(PORT, Host);
を呼び出すと、このエラーが発生しました。
これをローカルマシンが解決するホスト名/ドメイン名/ IPに戻すと、このエラーはなくなりました。
開発目的でホスト名を介して接続しようとしたため、目的のホスト名を使用してホストファイルにエントリを追加し、server.listen()
に渡されるホスト名と一致するようにしました。
すべてのコードが正常であるように見え、それでも同じエラーが表示される場合(私の場合)、解決策は/etc/resolv.conf
ファイルのネームサーバーをチェックしていました。
resolv.conf
ファイル(8.8.8.8)の先頭にGoogleのネームサーバーを追加しましたが、コードは再び正常に動作し始め、エラーはなくなりました。
Sudo apt-get upgrade
を実行した後、2015年2月4日にこのエラーが発生し始めたことに注目する価値があります。ノードjsが更新され、バグが導入されました。
最初に、コマンドラインでwget
を使用して必要なURLを取得することにより、DNSの問題があるかどうかを確認しました。ターゲットURLのコンテンツを取得したので、実際にはDNSの問題だとは思わなかった、しかしそうだった。
同様の問題がありましたが、AWS Lambda関数として実行されていたため、誰かがLambda関数でこの問題を抱えている場合、これが解決した方法です。
この修正が見つかるまで1日を費やしました。