2012-07-03 11 views
79

Me preguntaba cómo se desarrollaría un sitio web desde cero con Node.js. Entiendo cómo podría posiblemente hacerlo, pero estoy interesado en la mejor práctica de diseño.Mejores prácticas de construcción de un sitio web usando Node.js

necesito este sitio web teórica a:

  1. Hacer un montón de AJAX
  2. Sé muy sencillo
  3. ser relativamente pequeña
  4. Conectar a ... digamos que un servidor MySQL

En PHP, crear 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 la conexión a la base de datos, un archivo con funciones relacionadas db comunes y así sucesivamente
  • includes/layout/ que tenía cosas por el estilo footer.php, header.php, y relacionado con otro diseño cosas
  • includes/users/ para manejar las acciones relacionadas con los usuarios

Entonces PHP sólo le permiten crear páginas e incluir estos archivos juntos para formar un sitio web - podría ser 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 lo que podría ser similar en Node.js - Estoy buscando una manera de lograr esto que es tan sencilla , rápida ysencillo como sea 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, realmente amo las capacidades de JavaScript y estoy realmente entusiasmado con Node.js. Quiero aprender a desarrollar este tipo de cosas de la manera correcta desde el principio.

+3

También me gustaría señalar que es muy importante probar el código usando, por ejemplo, mocha -> https://github.com/visionmedia/mocha. Cree un código modular (módulos) pequeño y bien probado. – Alfred

+0

También puede echar un vistazo a Erlang que admite concurrencia de forma predeterminada, es más rápido que node.js y más fácil que decir C o Java. –

Respuesta

179

Para comenzar con la mala noticia: como Node.js es una técnica bastante joven, creo que encontrará que el proceso de creación de un sitio web completo y su mantenimiento/funcionamiento será muy diferente de lo que está utilizando actualmente a.

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

Los bordes ásperos que existen actualmente en Node.js, combinados con el ritmo acelerado de su desarrollo y todos los módulos involucrados pueden complicar las cosas y hacer que las cosas sean menos simples, rápidas y directas de lo que desearía.

Tener que fuera del camino, aquí es la buena noticia:

El Node Package Manager, NPM tiene un montón de buenas herramientas y marcos para ampliar la funcionalidad de los huesos desnudos de Node.js, lo que es adecuado para crear un servidor web.

Lo más notable sería el 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 en la parte superior de Sencha's Connect. Las cookies y las sesiones en realidad funcionan con Connect. Express es lo que simplifica su enrutamiento y maneja vistas/parciales. Por lo tanto, si no necesita todos los recursos que vienen con Express, puede usar Connect.

Si desea utilizar plantillas para estos parciales, el Jade Template Engine puede acelerar las cosas para usted. Aunque Josh3736 señala que Jade es lento y de espacio significativo. Se puede encontrar una descripción más completa here, que incluye su favorito, doT. (Yo personalmente uso Node.js solo para aplicaciones basadas en socket.io, por lo que es una mejor fuente que yo en lo que respecta a la creación de plantillas).

Usted puede conectarse a MySQL desde Node.js utilizando el módulo db-mysql, 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. .. enfoque 'moderno', que es usar una base de datos NoSQL como la mayoría de los proyectos de Node.js parecen hacer. MongoDB a través de Mongoose es el camino más popular por recorrer.

O si solo está almacenando los objetos que le interesan, simplemente haga clic en Redis (que probablemente necesite en algún momento).

Una vez que su sitio web esté completo, tendrá que implementarlo y asegurarse de que siga funcionando. Hay muchas maneras de hacerlo, como utilizar la compatibilidad de clúster incorporada o utilizar el módulo forever npm, que es más fácil de usar. See this SO question of mine for more information.

Conclusión:

Lo que estoy tratando de llegar es a esto:

preguntando cuál es la mejor práctica para la construcción de un sitio web en Node.js es, es casi lo mismo que preguntar qué la mejor manera de crear un sitio web en PHP es: 100 desarrolladores le darán 100 respuestas diferentes.

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

Como he dicho, Node.js sigue siendo una técnica bastante joven, por lo que ninguno de los marcos o herramientas adicionales han surgido como 'estándar de facto'; para la mayoría de las cosas que intentas hacer hay probablemente varias alternativas, y esperas que tu código se rompa cuando usas la mayoría de ellas durante las actualizaciones, porque el desarrollo de Node.js mismo y de la mayoría de los módulos es de ritmo rápido. Tendrás que mantenerte al día.

Poniendo todo junto:

Como he dicho, mi principal uso para la producción de Node.js es ser capaz de utilizar socket.io, así que no tengo ningún ejemplo buena producción actuales (Y como estoy a punto de irme en unas merecidas vacaciones, tampoco tengo tiempo para juntar una).Hay algunos buenos ejemplos sin embargo:

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

¡Buena suerte! (Y gracias a Josh3736 para rectificar mis errores.)

+2

¡Muchas gracias, justo lo que estaba buscando! Solo una cosa más corta, me pregunto cómo podría verse algún 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 se vería mi programa. Si para un 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)? De nuevo, muchas gracias –

+6

Esta es una buena respuesta, pero algunos puntos: Express está realmente * construido en la parte superior * de 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 idiomas significativos del espacio en blanco. Eche un vistazo a [algunos de los otros motores de plantillas] (https://github.com/joyent/node/wiki/Modules#wiki-templating) - mi favorito es doT, que es [rápido] (http: // jsperf.com/dom-vs-innerhtml-based-templating/53). – josh3736

+4

Finalmente, no diría que usar Node es "todo menos simple, rápido y directo", es muy diferente de lo que está acostumbrado. Una vez que descubra cómo funciona Node y sus diversos paquetes (Connect, Express), descubrí que puede desarrollar nuevos sitios * muy * rápidamente. Sí, todavía hay bordes ásperos, pero en general puedes hacer las cosas de manera simple y rápida. – josh3736

Cuestiones relacionadas