RSS Feed

Estructura de un sitio web MVC en NodeJS

6

febrero 28, 2012 by - @pjnovas

Las estructuras de sitios web MVC (Model View Controller) no varian mucho, ya que MVC es justamente un patrón de diseño que no especifica como ordenar nuestra vista y desacoplarla de nuestro modelo. Pueden leer mas de MVC aca.

Para el caso de NodeJS, hace tiempo que vengo armando y buscando en internet cual sería la mejor forma de organizar la estructura de nuestro sitio web para tener algo escalable … y en serio.

Llegué a una conclusión (y escucho con toda atención y felicidad propuestas de mejora):

/app-root
  /models

  /controllers

  /views

  /public
    /images
    /styles
    /scripts

  /tests

  /utils

  app.js
  package.json

Con algunas variaciones a lo que puede ser una apliación en .NET, Java, PHP, o cualquier otra … está es la estructura que, por el momento, me cierra mas.

Repasando un poco la estructura inicial de nuestro sitio web MVC en NodeJS en nuestro app.js vamos a tener el servidor … el famoso require(‘http’).createServer();, o en su defecto, un web framework.

También tenemos en el root el package.json donde vamos a especificar la info de nuestro paquete (o app) con sus dependencias (Package.json). Despues es básicamente lo de siempre, la carpeta public con las imagenes, .css y .js (client-side); el modelo, los controladores y las vistas (html, o bien utilizando algún ViewEngine como puede ser Ejs o Jade, entre otros). Y por último dejamos una carpetita utils para los modulos externos a nuestro web server, como puede ser socketIO.

En el próximo post vamos a ver como integrar en esta estructura un web framework, especificamente ExpressJS.


  • Pingback: Creando un server con ExpressJS | fernetjs

  • http://juanmaaguero.com.ar/ Juanma Aguero

    Y cuando hay muchos controladores o modelos? Que te parece mejor?

    Tener una estructura de
    /controllers
    /autoControllers
    /biciControllers

    O poner todo junto en el mismo directorio de controladores?

    • Pjnovas

      Habria que ver la cantidad de controllers que tenes. Por ahi es mas una separacion de “Areas”.
      Para el caso del Modelo yo no lo separaria, en todo caso usaria el Namespace Pattern de javascript, para desacoplarlo.
      Los controladores, si hablamos de un tamaño muy grande, se podrian separar en namespaces pero como si fueran “areas”. De todas formas para ese ejemplo tendria dos controladores “autoController” y “biciController”, ambos dentro de la carpeta Controllers. Lo pensaria mas por la url tambien, como armarias la url?, …/auto/list o …/bici/1234, esos serian controladores. Por ahi una separacion de areas seria: …/vehiculos/bici/1234 o …/vehiculos/auto/list, ahi tendria mas sentido tener el area “vehiculos”.

      Saludos!

  • Pingback: maillot barcelone messi 2013-2014

  • http://prhone.blogspot.com/ Romel Pérez

    Aunque he visto en un par de proyectos que separan los módulos en project/server/* y en project/client/*, sin embargo, me parece mejor esta manera de organizar un proyecto bajo el patrón MVC.

  • RICHARD STEVE YOUNG

    Existen varias opciones de frameworks MVC actualmente para Node, he estado usando Locomotive (Powerful MVC web framework for Node.js) últimamente y está de maravilla, este framework se sitúa una capa por sobre Express. Entre sus principales características destaco: soporte para patrones MVC (obvio!), soporte para ruteo RESTful, helpers, Conexión a las principales base de datos, soporte para varios motores de plantillas (ejemplo: twig, jade), etc.. Pueden ver más información en su sitio oficial: http://locomotivejs.org/

    Espero sirva de ayuda a alguien.

    Saludos!