Error: getaddrinfo ENOTFOUND en nodejs para obtener una llamada

Estoy ejecutando un servidor web en el nodo cuyo código se da a continuación

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

Y luego quiero hacer una solicitud de obtención en el siguiente código

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

Estoy empezando con el nodo y ni siquiera sé si esta es la manera correcta. Quiero probar el rendimiento de express y restify.He hecho una prueba de benchmark de apache para el código del servidor que escribí y encontré resultados contradictorios que restify es mejor. Así que quiero probar un poco más haciendo llamadas a servicios remotos y luego leer escribir en mongodb. El código anterior es mi punto de partida. Recibo el error

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

¿Al menos me dirijo en la dirección de escritura? ¿Cuál es el camino correcto para el tipo de pruebas que quiero? ¿Por qué obtuve el resultado restify más rápido que express? ¿Alguien puede guiarme a los mejores tutoriales de punto de partida para la aplicación en node / express / backbone y mongodb?

getaddrinfo ENOTFOUND significa que el cliente no pudo conectarse a la dirección dada. Intenta especificar el host sin http:

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

En cuanto a los recursos de aprendizaje, no te equivocarás si comienzas con http://www.nodebeginner.org/ y luego revisas un buen libro para obtener un conocimiento más profundo. Recomiendo Professional Node.js , pero hay muchos fuera ahí.

para mí fue porque en el archivo / etc / hosts no se agrega el nombre de host

Compruebe el archivo de host que así

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

No puedo explicar por qué, pero cambiar el parámetro url de tener localhost a 127.0.0.1 en el método mongodb.MongoClient.connect() en Windows 10 resolvió el problema.

También tuve el mismo problema y lo solucioné usando un proxy correcto. Por favor, comprueba dos veces tu configuración de proxy si estás utilizando la red proxy.

Espero que esto te ayudará –

tengo el mismo problema con el servidor de Amazon, cambio mi código a este

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

verifique el módulo de 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%) 

Me encontré con el mismo problema y después de un poco de prueba y error descubrí que la personalización del archivo de mi hosts estaba causando el problema.

Mi DNS localhost fue sobrescrito y debido a eso un simple ping falló:

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

Una vez que resolví la configuración del /private/etc/hosts , el localizador ping funcionó correctamente y ya no recibía el error que estaba viendo:

 # Fatal error: getaddrinfo ENOTFOUND