Je vois que l'on doit s'assurer que le DNS est correctement résolu à partir de la machine, consultez la documentation du nœud pour vous assurer que le domaine est résoluble.
j'écris un programme basé sur des nœuds, dans lequel l'utilisateur peut me demander de faire une httprequest en son nom {bien sûr, il me fournit des données et une méthode pour appeler avec} mais chaque fois que je fais une httprequest, il me donne une erreur
getaddrinfo ENOENT voici à quoi ressemble mon code
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…');
}
J'ai vu cela se produire lorsque votre hôte (que vous transmettez en tant que httpaction) a le schéma (donc "http: //") devant lui. Votre hôte doit être strictement le domaine comme "www.google.com" et non " http://www.google.com " ou "www.google.com/hello-world" ou "- http://www.google.com/hello-world ".
Gardez-le juste le domaine.
Voici un exemple: http://allampersandall.blogspot.com/2012/03/nodejs-http-request-example.html
Le problème peut également se produire si vous avez une barre oblique de fin:
Bon:"www.google.com"
Mauvais:"www.google.com/"
Évitez tous ces problèmes de nom d'hôte/protocole/port/barre oblique en utilisant le module request
au lieu de http
J'obtenais [Erreur: Getaddrinfo ENOENT], mais c'était juste après avoir obtenu [Erreur: connectez EMFILE]; depuis que je fais des tests de charge avec des milliers de clients, l'erreur EMFILE (la cause première) était en cours d'opaque. La solution était la même que pour EMFILE : augmenter le nombre de descripteurs de fichiers. Il suffit de l'ajouter ici pour être complet au cas où quelqu'un d'autre aurait le même problème.
J'ai frappé à nouveau aujourd'hui pour une erreur stupide. En effet, le numéro de port a été ajouté au nom d'hôte.
// wrong. gets error getaddrinfo ENOENT
var options = {
hostName: 'localhost:1337',
....
}
// correct
var options = {
hostname: 'localhost',
port: 1337,
};
J'obtenais cette erreur lors de l'appel de server.listen(PORT, Host);
où l'hôte n'a pas pu être résolu sur la machine locale.
Une fois que j'ai changé cela en un nom d'hôte/nom de domaine/ip que la machine locale a résolu, cette erreur a disparu.
Comme j'essayais de me connecter via un nom d'hôte à des fins de développement, j'ai ajouté une entrée à mon fichier d'hôtes avec le nom d'hôte souhaité et je me suis assuré que cela correspondait au nom d'hôte passé à server.listen()
Si tout votre code semble correct et que vous obtenez toujours la même erreur, ce qui était mon cas, la solution consistait à vérifier les serveurs de noms sur mon /etc/resolv.conf
fichier.
J'ai ajouté le serveur de noms de Google au début de mon resolv.conf
fichier (8.8.8.8) et le code a recommencé à fonctionner correctement, plus d'erreur.
Il convient de noter que cette erreur a commencé à se produire sur moi le 4 février 2015 après avoir exécuté un Sudo apt-get upgrade
, mon noeud js doit avoir été mis à jour et un bug introduit qui semblait incompatible avec les serveurs de noms que j'avais.
Au début, j'ai vérifié si j'avais des problèmes DNS en récupérant l'URL dont j'avais besoin en utilisant wget
sur la ligne de commande, j'ai bien obtenu le contenu de l'URL cible, donc je ne pensais pas qu'il s'agissait en fait d'un problème DNS , mais c'était.
J'ai eu un problème similaire mais fonctionnant en tant que fonction AWS Lambda, donc au cas où quelqu'un aurait ce problème avec les fonctions Lambda, voici comment je l'ai résolu.
J'ai passé une journée jusqu'à ce que je trouve ce correctif, j'espère qu'il aide quelqu'un d'autre.