nodejs httprequest avec des données d'erreur getaddrinfo ENOENT
Mise à jour - a Répondu par l'auto
Je vois qu'on a à assurez-vous que le DNS est résolu correctement à partir de la machine, découvrez le nœud de la documentation pour s'assurer que le domaine est résolu.
Question D'Origine
je suis en train d'écrire une nœuds en fonction du programme,dans laquelle l'utilisateur peut me demander de faire un httprequest sur leur nom {bien sûr ils me fournir quelques données, et de la méthode à appeler avec} mais chaque fois que je fais un httprequest il me donne une erreur
getaddrinfo ENOENT
c'est ainsi que mon code ressemble
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…');
}
- Pour le développement local, utiliser 127.0.0.1 au lieu de localhost
Vous devez vous connecter pour publier un commentaire.
J'ai vu cela se produire lorsque votre hôte qui vous croiser en httpaction) a le schéma (donc "http://") en face de lui. Votre hôte doit être strictement le domaine comme "www.google.com" pas "http://www.google.com" ou "www.google.com/hello-world" ou "http://www.google.com/hello-world".
Garder 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:
Bon:
"www.google.com"
Mauvais:
"www.google.com/"
Éviter toutes ces hostname/protocole/port/slash, des problèmes à l'aide de la
request
module au lieu dehttp
https://github.com/mikeal/request
Je recevais [Erreur: Getaddrinfo ENOENT], mais c'était juste après l'obtention de [Erreur: connexion EMFILE]; depuis que je suis en train de faire des tests de charge avec des milliers de clients de la EMFILE erreur (la cause) était opaqued. La solution a été la même que pour EMFILE: augmenter le nombre de descripteurs de fichiers. Juste de l'ajouter ici par souci d'exhaustivité dans le cas où quelqu'un d'autre a le même problème.
J'ai frappé ce nouveau aujourd'hui pour une stupide erreur. C'était parce que le numéro de port a été mis en tant que partie du nom d'hôte.
J'ai été faire cette erreur lors de l'appel de
server.listen(PORT, HOST);
où l'HÔTE n'a pas pu être résolu arrière de la machine locale.Une fois que j'ai changé ce retour à un nom de domaine/nom de domaine/adresse ip de la machine locale résolu à l', cette erreur a disparu.
Depuis que j'ai été d'essayer de se connecter via un nom d'hôte pour dev fins, j'ai ajouté une entrée dans mon fichier hosts avec le nom d'hôte désiré et veillé à ce que cette appariés le nom d'hôte transmis à
server.listen()
Si tout votre code semble être bien, et vous êtes toujours obtenir la même erreur, ce qui était mon cas, la solution a été de vérifier les serveurs de noms de domaine sur mon
/etc/resolv.conf
fichier.J'ai ajouté de Google serveur de noms au début de mon
resolv.conf
fichier (8.8.8.8) et le code commencé à travailler à l'amende juste une fois de plus, plus aucune erreur.Il est intéressant de remarquer que cette erreur a commencé à me Fév. 4ème 2015 après j'ai couru un
sudo apt-get upgrade
, mon node js doit avoir été mis à jour et un bug introduit qui semblaient incompatibles avec les serveurs de noms de domaine que j'ai eu.Au premier abord, j'ai vérifié si j'avais eu tous les problèmes DNS par l'extraction de l'URL que j'ai besoin de l'aide de
wget
sur la ligne de commande, j'ai reçu le contenu de l'url cible de l'amende, donc je ne pense pas que c'était effectivement un problème de DNS, mais il a été.J'ai eu un problème similaire, mais en cours d'exécution comme une AWS Lambda fonction, donc au cas où quelqu'un rencontre ce problème avec des fonctions Lambda c'est comment je l'ai résolu.
J'ai passé une journée jusqu'à ce que j'ai trouvé ce correctif, espérons que cela aide quelqu'un d'autre.