Ver Mensaje Individual
  #4 (permalink)  
Antiguo 26/03/2013, 05:31
Avatar de dontexplain
dontexplain
 
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 11 años, 10 meses
Puntos: 127
Respuesta: ¿Servir páginas PHP en vez de HTML con Node.js?

No es tampoco excesivamente difícil entender que existe un cgi php que no es más que una aplicación php que recibe una entrada por parámetros y vuelca una salida por stdout con el php procesado.

Dado esto y si no hubiera alternativas puedes usar un cgi php como una aplicación child. El procedimiento es muy sencillo y creo que no involucra un derrame cerebral:

1. Seleccionas el fichero php.
2. Bien lo abres extrayendo el contenido o bien simplemente almacenas el path.
3. Usas el módulo child_process ejecutando el cgi con los parámetros correspondientes (mediante spawn por ejemplo), o bien indicando el php explícitamente o bien indicando el path (ir al paso 2)
4. Spawn devuelve un objeto de tipo ChildProcess , al cual se le agrega un listener a su objeto stdout a la espera de recibir datos mediante el evento data, cuyo primer parámetro contiene los datos

ChildProcess.stdout.on("data",function(data){
console.log("Y he aquí el htmlcito" + data);
})

Y listo.

También tengo que indicarte cómo volcarlo? Bien, una vez tengas la salida del cgi (data), dentro del callback, especificas al objeto response (el segundo parámetro del callback del servidor http la cabecera especificando el TIPO DE CONTENIDO que va a devolver. Sí, aunque te parezca extraño, de ahí te descargaba el contenido, porque hace falta indicar que es html explícitamente. Existen dos cabeceras relacionadas, Content-Disposition y Content-Type, la primera indica la disposición y la segunda el tipo. También está Content-Transfer-Encoding, en fin, existen alternativas.

response.setHeader("Content-Type", "text/html");

Un saludo.
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor

Última edición por dontexplain; 26/03/2013 a las 05:41