2011-12-18 20 views
7

Instalé node.js desde http://nodejs.org/#download, v0.6.6. Estoy usando Windows 7 de 32 bits.Ejemplos básicos de Node.js que no funcionan en Windows 7

He estado revisando varios tuts en línea, y quiero experimentar mientras lo hago, pero parece que no puedo hacer que node.js funcione. Nodo ejecutará mi archivo .js, pero cualquier solicitud del navegador expirará.

Aquí es un ejemplo típico de Hello World que no funciona:

var http = require('http'); 
http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('Hello World\n'); 
}).listen(1337); 

Señalando mi navegador en 127.0.0.1:1337 o localhost: 1337 no funciona. La solicitud del navegador se agota. También intenté escuchar (1337, '0.0.0.0') y escuchar (1337, '127.0.0.1').

Sé que el servidor se está ejecutando; si presiono CTRL + C y paro el nodo, el navegador vuelve inmediatamente con ERR_CONNECTION_RESET.

También intenté ejecutar el código en este sentido, que no funcionará: https://gist.github.com/1339846. Termino con la salida de la consola "¡Escuchando!" y luego nada más.

Además, me han tratado diferentes puertos, y mi firewall está desactivado a través de

netsh firewall set opmode mode=disable 

he intentado con cortafuegos totalmente incapacitado, y el servicio detenido. Si reviso las conexiones usando netstat -noa, puedo ver que el nodo tiene un grupo de conexiones abiertas para los navegadores, todas en estado CLOSE_WAIT. Entonces parece que las conexiones están sucediendo, pero node.js simplemente no está funcionando.

La función de devolución de llamada que se supone iniciada por una solicitud nunca se ejecuta; rocié algunas instrucciones de console.log en varias áreas, y todas se ejecutan excepto cualquiera en la devolución de llamada.

Desinstalé, volví a instalar, intenté un par de versiones anteriores, reinicié mi máquina ... nada.

¡Se agradece cualquier ayuda!

ACTUALIZACIÓN: Estoy a punto de darme por vencido. He intentado todo lo que se me ocurre, y resultó ser más fácil ejecutar node.js en una instancia de Ubuntu en VirtualBox que captar pajas.

+1

cambiar el puerto a 8000 o 8080 y vuelva a intentarlo. Déjame saber cómo va esto. – alessioalex

+0

He intentado esos y otros puertos. – CircusNinja

+0

Tiene que haber algo con un firewall, he instalado Node on W7 en una PC y en Windows XP en otras 2 PC y funcionó en todas partes. – alessioalex

Respuesta

2

Lo probé y funciona para mí. Asegúrate de no estar bloqueando el nodo con tu firewall.

+1

Firewall deshabilitado y aún no cooperará. – CircusNinja

2

Estoy usando Windows 7 de 32 bits.

¿Qué edición de Windows 7 está utilizando? P.ej. ¿Home Premium, Professional, Ultimate?

Un hilo en el npm github project menciona síntomas similares al instalar módulos nodejs utilizando npm, y los comentarios parecen limitarse a ser causados ​​por Windows 7 Professional. Ser de 32/64 bits no parece importar.

Tengo tanto el problema que describe, como el problema de instalación de npm, y estoy corriendo en Windows 7 Professional de 64 bits.

El uso de XPMode (una solución mencionada en el hilo npm) me ha permitido resolver estos dos problemas.Aunque, supongo que esto es solo una versión más de Windows de su uso de Ubuntu en VirtualBox.

Otras soluciones intentaron sin éxito:

  • Marca/ejecutar una versión de depuración de v0.6.6
  • Marca/ejecutar una versión de depuración de v0.6.5 (en realidad se estrelló en el arranque)
  • ajustarse diversas Modos de compatibilidad instalado en la NODE.EXE
  • preenvasados ​​instalador de Windows de v0.6.5
+0

Estoy usando Ultimate. Gracias por la información sobre el tema; será interesante ver si está relacionado. – CircusNinja

1

que estaba teniendo el mismo problema ingenio h este código (Http ejemplo Server desde este enlace: http://net.tutsplus.com/tutorials/javascript-ajax/node-js-for-beginners/)

var http = require("http"); 
http.createServer(function (request, response) { 
    request.on("end", function() { 
     response.writeHead(200, { 
      'Content-Type': 'text/plain' 
     }); 
     response.end('Hello HTTP!'); 
    }); 
}).listen(8080); 

Probé Windows 7 versión de 64 bits, Windows XP máquina virtual, ubuntu máquina virtual ... nada! Solo funcionó después de que comencé la línea "request.on". Tu ejemplo (que no tiene esta línea) funcionó bien para mí. Estoy usando la última versión estable de node.js (v0.10.18 para windows o linux). Espero que esto ayude a cualquiera que tenga problemas con esto.

+0

Esto funciona en mi Windows 7 Pro. –

8

!!!!!! El mismo problema ocurrió para mí ....

Aquí es una solución que todavía tengo que encontrar en cualquier lugar:

Buscar en Windows Firewall with Advanced Security y ver si Evented I/O for V8 JavaScript se bloquea o aparece dos veces.

Si es así, desbloquéelo y elimine la entrada duplicada. Si instala/desinstala/instala nodeJs, habrá 2 entradas.

También cuando el nodo se ejecuta por primera vez se abre el cuadro de diálogo de Firewall de Windows preguntándole si desea permitir que el nodo tenga acceso al firewall. Si presiona "No" o simplemente cierra la ventana sin preguntar, creará Evented I/O for V8 JavaScript Y SE BLOQUEARÁ.

+0

La mina tenía dos entradas, ambas permitidas. Suprimido, sigue sin éxito :( –

+0

Intente deshabilitar el cortafuegos y compruébelo. –

+0

¡Instalé la última versión! –

3

Me encontré con el mismo problema y después de leer toda la documentación, inesperadamente me encontré con lo que creo que es la solución. En mi caso, me daba cuenta de que las solicitudes entrantes SE ENTREGABAN en el nodo, pero la respuesta nunca tuvo su evento 'final' activado. Por lo tanto, alterar las reglas de firewall entrantes en Windows no parecía estar relacionado con el problema.

Por lo tanto, http.createServer toma en un solo argumento, una función que debe incluir un parámetro de solicitud y respuesta. El parámetro de solicitud parecía ser donde estaba el problema. El parámetro de solicitud es una instancia de http.incomingMessage. Esta clase solo tenía como un tipo de evento, pero también era una implementación de Stream.Readable, que es donde encontré el evento 'end' que no se activó. Realmente, por ninguna otra razón que solo para probar cuál fue el primer evento que no se desencadenó, acabo de agregar un oyente para otro tipo de evento ('legible'), y solo agregué una línea console.log que hizo que todo funcionara.

Así que el código es simplemente algo como esto:

var http = require("http"); 
http.createServer(function (request, response) { 
    console.log('request'); 
    request.on('readable', function(){ 
     console.log('request readable'); 
    }); 
    request.on("end", function() { 
     console.log('request end'); 
     response.writeHead(200, { 
      'Content-Type': 'text/plain' 
     }); 
     response.end('Hello HTTP!'); 
    }); 
}).listen(8080); 

El código anterior funciona, mientras que la versión anterior a continuación sin un detector de eventos 'legible' no siempre responde:

var http = require("http"); 
http.createServer(function (request, response) { 
    console.log('request'); 
    request.on("end", function() { 
     console.log('request end'); 
     response.writeHead(200, { 
      'Content-Type': 'text/plain' 
     }); 
     response.end('Hello HTTP!'); 
    }); 
}).listen(8080); 

I no estoy seguro de por qué esto funciona, excepto por una pequeña pista en la documentación que dice:

En algunos casos, listeni ng para un evento 'legible' provocará que algunos datos se lean en el búfer interno del sistema subyacente, si aún no lo hubiera hecho.

1
  1. Ir a "elementos del Panel \ panel de control del Control \ Firewall de Windows \ animales programas"
  2. Haga clic permitir que los programas
  3. seleccione nodejs de la lista.

que esto esté arreglado todos los problemas para mí

Cuestiones relacionadas