Mejores prácticas para crear un sitio web con Node.js

79

Me preguntaba cómo se haría para desarrollar un sitio web desde cero con Node.js. Entiendo cómo podría posiblemente hacerlo, pero estoy interesado en la mejor práctica del diseño.

Necesito este sitio web teórico para:

  1. Haz mucho AJAX
  2. Sea muy sencillo
  3. Ser relativamente pequeño
  4. Conéctese a ... digamos un servidor MySQL

En PHP, la construcción de un sitio web bastante pequeño fue muy sencillo: configuré PHP en Apache y un servidor MySQL y luego hice algo como:

  • includes/db/ que tiene connect.php para conectarse a la base de datos, un archivo con funciones comunes relacionadas con la base de datos y así sucesivamente
  • includes/layout/ que tenía cosas como footer.php, header.php y otras cosas relacionadas con el diseño
  • includes/users/ para manejar acciones relacionadas con el usuario

Luego, PHP simplemente le permite crear páginas e incluir estos archivos juntos para formar un sitio web; podría hacer algo como:

<?php
   require_once('inclues/users/user_session.php');
   require_once('inclues/db/connect.php');
   require_once('inclues/design/header.php')
?>

// Other php or html or related content relating to the page

<?php
   require_once('inclues/.../footer.php');
?>

Me preguntaba qué podría ser similar en Node.js; estoy buscando una forma de lograr esto que sea lo más simple , rápida y directa posible.

Si la respuesta no es simple, me encantaría una recomendación de libro, no me importa leer.

Me encanta la programación basada en eventos, me encantan las capacidades de JavaScript y estoy muy entusiasmado con Node.js. Quiero aprender a desarrollar este tipo de cosas con él de la manera correcta desde el principio.

Benjamin Gruenbaum
fuente
3
También me gustaría señalar que es muy importante probar su código usando, por ejemplo, mocha -> github.com/visionmedia/mocha . Cree pequeños códigos modulares bien probados (módulos).
Alfred
También puede echar un vistazo a Erlang, que admite la concurrencia de forma predeterminada, es más rápido que node.js y más fácil que, digamos, C o Java.

Respuestas:

184

Para comenzar con las malas noticias: como Node.js es una técnica bastante joven, creo que encontrará que el proceso de crear un sitio web completo y mantenerlo / operarlo será muy diferente al que está acostumbrado actualmente.

Josh3736 agrega: Una vez que descubras cómo funcionan Node.js y sus diversos paquetes (Connect, Express), descubrí que puedes desarrollar nuevos sitios muy rápidamente.

Sin embargo, las asperezas que existen actualmente en Node.js, combinadas con el ritmo rápido de su desarrollo y todos los módulos involucrados, pueden complicar las cosas y hacer las cosas menos simples, rápidas y directas de lo que le gustaría.

Habiendo dicho eso, estas son las buenas noticias:

El Administrador de paquetes de nodo, la NGP tiene una gran cantidad de herramientas buenas y marcos para ampliar la funcionalidad de los huesos desnudo de Node.js, lo que es adecuado para crear un servidor web.

Lo más notable sería Express Framework, que contiene casi todo lo que necesita para ejecutar un servidor web (incluidas las cookies, las sesiones y el enrutamiento de rutas). Además, Express admite parciales, que se encargan de su encabezado y pie de página.

Express está construido sobre Connect de Sencha . Las cookies y las sesiones en realidad funcionan con Connect. Express es lo que simplifica su enrutamiento y maneja vistas / parciales. Entonces, si no necesita todos los detalles que vienen con Express, puede optar por Connect.

Si le gusta usar plantillas para estos parciales, Jade Template Engine puede acelerar las cosas por usted. Aunque Josh3736 señala que Jade es lento y significativo en espacios en blanco. Puede encontrar una descripción más completa aquí , que incluye su favorito, doT . (Yo personalmente uso Node.js solo para socket.ioaplicaciones basadas, por lo que él es una mejor fuente que yo cuando se trata de plantillas).

Usted puede conectarse a MySQL desde Node.js utilizando el DB-mysql módulo, pero si no es necesario que debido a que usted está accediendo a los datos conectados a un sistema ya existente, te aconsejo utilizar una más ... 'moderna ', que consiste en utilizar una base de datos NoSQL como parecen hacer la mayoría de los proyectos Node.js. MongoDB a través de Mongoose es la forma popular de hacerlo.

O si solo está almacenando objetos que le interesan, simplemente opte por Redis (que probablemente necesitará en algún momento de todos modos).

Una vez que su sitio web esté completo, deberá implementarlo y asegurarse de que siga funcionando. Hay muchas formas de hacerlo, como usar el soporte de clúster integrado o usar el forevermódulo npm más fácil de usar. Vea esta pregunta mía SO para obtener más información.

Conclusión :

A lo que estoy tratando de llegar es a esto:

Preguntar cuál es la mejor práctica para crear un sitio web en Node.js es casi lo mismo que preguntar cuál es la mejor forma de crear un sitio web en PHP: 100 desarrolladores te darán 100 respuestas diferentes.

NPM está bendecido con una variedad de excelentes marcos que simplifican enormemente muchas de las tareas involucradas, pero todo se basa en la preferencia, cuál es el camino a seguir realmente.

Como he dicho, Node.js es todavía una técnica bastante joven, por lo que ninguno de los marcos o herramientas adicionales ha surgido como 'estándar de facto' todavía; para la mayoría de las cosas que está intentando hacer, es probable que existan varias alternativas, y espere que su código se rompa cuando use la mayoría de ellas durante las actualizaciones, porque el desarrollo de Node.js y la mayoría de los módulos es rápido. Tendrás que seguir el ritmo.

Poniéndolo todo junto :

Como dije, mi uso principal de producción para Node.js es poder usar socket.io, por lo que no tengo ningún buen ejemplo de producción presente (y como estoy a punto de irme de unas merecidas vacaciones, no tampoco tengo tiempo para armar uno). Sin embargo, hay algunos buenos ejemplos:

Nuevamente, el camino a seguir (y posteriormente el ejemplo a seguir) depende en gran medida de sus objetivos finales y de las técnicas elegidas, pero afortunadamente hay muchos recursos disponibles para todas las opciones disponibles. La mayoría de los módulos utilizan repositorios de GitHub bien documentados e incluyen ejemplos en combinación con los módulos más populares (consulte el /examples/directorio que parece estar presente en la mayoría de los repositorios).

¡Buena suerte! (Y gracias a Josh3736 por corregir mis errores).

Rem.co
fuente
2
Muchas gracias, ¡justo lo que estaba buscando! Solo una cosa más, me pregunto cómo se vería un código similar al código que describí en el título en node.js. ¿Cómo funcionaría la separación lógica? Digamos que uso express y jade con railyway.js. Todavía estoy luchando por entender cómo sería mi programa. Si, por ejemplo (simple), tengo un archivo index.php que carga y muestra datos básicos de la base de datos e incluye archivos de pie de página / encabezado, ¿cómo se vería ese tipo de código (de manera óptima)? Nuevamente, muchas gracias
Benjamin Gruenbaum
6
Esta es una buena respuesta, pero algunos puntos: Express está construido sobre Connect. Las cookies y las sesiones en realidad funcionan con Connect. Express es lo que simplifica su enrutamiento y maneja vistas / parciales. Jade es extremadamente lento y (en una nota personal) odio los lenguajes con espacios en blanco. Eche un vistazo a algunos de los otros motores de plantillas : mi favorito es doT, que es rápido .
josh3736
4
Finalmente, no diría que usar Node es "todo menos simple, rápido y directo", es muy diferente a lo que está acostumbrado actualmente. Una vez que descubra cómo funcionan Node y sus diversos paquetes (Connect, Express), descubrí que puede desarrollar nuevos sitios muy rápidamente. Sí, todavía hay asperezas, pero en general, puede hacer las cosas de forma sencilla y rápida.
josh3736
2
Remco, también me encantaría alguna referencia a mi último comentario, si explicas cómo implementaría dicho nodo de uso (usando una buena, aunque no la mejor, práctica) marcaré esta respuesta. Esta es la última parte que me está molestando y estoy luchando con esta última etapa, nuevamente, gracias.
Benjamin Gruenbaum
3
He reunido este ejemplo de extremo a extremo de cómo hacer un sitio web de pila completa usando la pila MEAN (MongoDb, Express, Angular & Node). Puede reemplazar Angular o el cliente con lo que esté familiarizado. Me han dicho que este es el mejor video de introducción que existe, así que quizás ayude a otros a comenzar youtube.com/watch?v=AEE7DY2AYvI
Michael Moser