2012-05-17 17 views
20

Estoy haciendo una solicitud http con el cliente node.js, y aparece un error ECONNREFUSED. Cuando hago lo que parece ser la misma petición con mi navegador o curl(1), funciona muy bienError ECONNREFUSED con node.js que no ocurre en otros clientes

Aquí está la solicitud de nodo:

var options = { 
    host: 'localhost', 
    port: 8080, 
    path: '/explorers/1.0/agegroup', 
    method: 'GET' 
}; 

var req = http.request(options, function(res) { 
    res.setEncoding('utf8'); 
    res.on('data', function (chunk) { 
    console.log('BODY: ' + chunk); 
    }); 
}); 

req.on('error', function(e) { 
    console.log(e); 
}); 

req.end(); 

Y me da el error:

{ [Error: connect ECONNREFUSED] 
    code: 'ECONNREFUSED', 
    errno: 'ECONNREFUSED', 
    syscall: 'connect' } 

Pero cuando hago la misma solicitud con un cliente diferente (curl en este caso):

$ curl http://localhost:8080/explorers/1.0/agegroup 
{... response JSON ...} 

Otras notas:

  • He intentado cambiar el host a www.google.com y el puerto a 80, y el nodo hace la conexión con éxito

  • He intentado cambiar el puerto de el servidor, y todavía puedo hacer solicitudes con todos los clientes pero node.js (que todavía obtiene ECONNREFUSED)

  • El servidor al que me estoy conectando es el CherryPy WSGI Server. Cuando intento conectarme a un servidor node en localhost: 8080, funciona bien, lo que me haría pensar que es el problema del servidor, excepto que otros clientes trabajan con el servidor CherryPy.

  • He intentado usar los mismos encabezados que usa mi navegador, pero eso no funciona, y parece que el problema está en el nivel TCP de todos modos, por lo que los encabezados HTTP no deberían ser un problema.

¿Qué pasa con mi pedido de node?

+0

grillo de cricket ... – aaronstacy

+0

Estoy obteniendo este mismo comportamiento - recién comenzó a exhibir, inexplicablemente. Si lo resuelvo, intentaré publicar algo de información. –

+0

mismo para mí, tengo el problema con el servidor web phantomjs, que supuestamente usa mangosta. – user1950929

Respuesta

12

Supongo que a veces sólo tiene que alejarse del problema ...

he encontrado una solución, pero no parece responder a la pregunta, y no me gusta mucho la misma.

He cambiado la configuración del servidor CherryPy para que se publique en 127.0.0.1 en lugar de localhost, y el cliente node comenzó a funcionar.

+0

interesante ... he usado localhost para conectarme a redis y a mysql, pero nunca tuve el problema ... ¿estabas probando el curl desde el mismo servidor? (preguntándose si el archivo hosts podría estar teniendo un problema) –

+0

sí, el comando curl y el script del nodo fueron exactamente como en la pregunta, ambos golpeando localhost: 8080 – aaronstacy

0

Me enfrenté exactamente al mismo problema cuando estaba accediendo a una URL de un tercero. Intenté usar dns (subdomain.domain.com) e ip (XXX.XXX.XXX.XXX) ambos pero no funcionó.

Después de algunas dificultades, más tarde me di cuenta de que se trataba de un problema en el extremo del servidor (subdominio.dominio.com) que no respondía y bajaba.

En desacuerdo, este es un problema con localhost/127.0.0.1 (o nombre de dominio vs dirección IP). (En el caso anterior, seguramente se trata de un mapeo de host incorrecto)

+1

hm, no creo que siga - el mapeo dns generalmente sucede en bibliotecas debajo del nivel node.js/curl (vea gethostbyname (3)). así que en la pregunta no fue un problema de mapeo de host ... – aaronstacy

15

No estoy de acuerdo con el desacuerdo de Soman.

He estado tirando de mi cabello en este caso, pero sí, con seguridad nodejs v0.10.24 y v0.10.25 se niegan a conectarse a un PHP 5.Desarrollo 4 servidor (servidor de línea de comandos de PHP) Cuando se invoca como:

php -S localhost:8088 

El navegador, rizo, todo lo demás se conecta muy bien. Sin embargo, con toda seguridad, el cambio de la dirección de la unión a ser:

php -S 127.0.0.1:8088 

Y el uso de xmlrpc nodejs' conecta muy bien. Esto ocurrió en Mac OS X 10.9.1. Muy raro.

+4

node.js no respeta el archivo de hosts del sistema al hacer la resolución –

+0

dns ¡Muchas gracias! Probé una combinación posible en el lado Nodo (localhost, 127.0.0.1, LAN IP, nombre de dominio usando el archivo de host, etc.) pero no tuve suerte. Cambié la configuración de mi ejecución en PHPStorm y funcionó. ¡Gracias! – Tibo

+0

Esto también funciona para las aplicaciones de Rails. – Don

6

Acabo de enfrentar el mismo problema.

Tenga en cuenta que Windows 7 por defecto no incluye una entrada para localhost en C:\Windows\System32\drivers\etc\hosts (wikipedia reference)

Adición de la entrada para localhost no tiene ningún efecto con Node.js (0.10.25), ya que al parecer se salta los anfitriones archivo completamente.

Utilice 127.0.0.1 como dirección local en su lugar, esto funcionará lo que está en su archivo de hosts.

+0

Ese fue el caso para mí, 1h de furia antes de darme cuenta de que he cambiado el host local en mis anfitriones. –

2

Tuve el mismo problema. Pude resolverlo reemplazando el localhost o 127.0.0.1 por la dirección IP de mi sistema (use ifconfig para la dirección IP).

Cuestiones relacionadas