Errore: getaddrinfo ENOTFOUND in nodejs per ottenere una chiamata

Sto facendo funzionare un web server sul nodo il codice per cui è dato sotto

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

E poi voglio fare una richiesta di ottenere nel seguente codice

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

Sto solo iniziando con il nodo e non so nemmeno se questo è il modo giusto. Voglio testare le prestazioni di Express e Restify. Ho eseguito un test di benchmark Apache per il codice server che ho scritto e ho trovato risultati contraddittori che restitono migliori. Quindi voglio testare ancora un po ‘facendo chiamate ai servizi remoti e poi più tardi leggi scrivi a mongodb.Il codice precedente è il mio punto di partenza. Ricevo l’errore

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

Sto andando nella direzione della scrittura? Qual è il modo giusto per il tipo di test che voglio? Perché ho ottenuto il risultato di essere ripristinato più velocemente di Express? Qualcuno può guidarmi ai migliori tutorial di partenza per l’applicazione in node / express / backbone e mongodb?

getaddrinfo ENOTFOUND significa che il client non è stato in grado di connettersi a un determinato indirizzo. Prova a specificare l’host senza http:

 var optionsget = { host : 'localhost', port : 3010, path : '/quote/random', // the rest of the url with parameters if needed method : 'GET' // do GET }; 

Per quanto riguarda le risorse di apprendimento, non sbaglierai se inizi con http://www.nodebeginner.org/ e poi esegui qualche buon libro per ottenere una conoscenza più approfondita – ti consiglio Professional Node.js , ma ce ne sono molti fuori Là.

per me è stato perché nel file / etc / hosts il nome host non è stato aggiunto

Controlla il file host che piace questo

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

Non riesco a spiegare perché, ma la modifica del parametro url da avere localhost a 127.0.0.1 sul metodo mongodb.MongoClient.connect() su Windows 10 ha risolto il problema.

Ho anche avuto lo stesso problema e l’ho risolto usando il proxy di destra. Si prega di ricontrollare le impostazioni del proxy se si utilizza la rete proxy.

Spero che questo ti possa aiutare

Ho lo stesso problema con il server Amazon, ho cambiato il mio codice a questo

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

controlla il modulo nodo mysql https://github.com/mysqljs/mysql

 var http = require('http'); var options = { host: 'localhost', port: 80, path: '/broadcast' }; var requestLoop = setInterval(function(){ http.get (options, function (resp) { resp.on('data', function (d) { console.log ('data!', d.toString()); }); resp.on('end', function (d) { console.log ('Finished !'); }); }).on('error', function (e) { console.log ('error:', e); }); }, 10000); var dns = require('dns'), cache = {}; dns._lookup = dns.lookup; dns.lookup = function(domain, family, done) { if (!done) { done = family; family = null; } var key = domain+family; if (key in cache) { var ip = cache[key], ipv = ip.indexOf('.') !== -1 ? 4 : 6; return process.nextTick(function() { done(null, ip, ipv); }); } dns._lookup(domain, family, function(err, ip, ipv) { if (err) return done(err); cache[key] = ip; done(null, ip, ipv); }); }; // Works fine (100%) 

Stavo incontrando lo stesso problema e dopo alcune prove ed errori ho scoperto che la personalizzazione del mio file hosts stava causando il problema.

Il mio DNS localhost stato sovrascritto e, a causa di ciò, un semplice ping stava fallendo:

 $ ping http://localhost # ping: cannot resolve http://localhost: Unknown host 

Una volta risolta la configurazione del file /private/etc/hosts , il pinging localhost ha funzionato con successo e non riceveva più l’errore che stavi vedendo:

 # Fatal error: getaddrinfo ENOTFOUND