Estructura y componentes de una aplicación en Sails.js

30/01/2017Artículo original

En el artículo anterior aprendimos cómo inicializar una aplicación de Sails.js, ahora vamos a explorar la estructura y componentes de esta clase de aplicaciones

Sails.js se basa en el principio de Convención sobre Configuración, esto lo logra preinstalando un conjunto de aplicaciones recomendadas con una estructura de archivos similar a la que vemos en Django, y añade las configuraciones básicas; con esto, tenemos todo lo necesario para empezar a trabajar mucho mas rápido y siguiendo estándares probados.

Un punto importante de Sails.js es su arquitectura MVC para backend:

Si tenemos varios modelos es posible mezclar varios tipos de bases de datos en un mismo proyecto, permitiéndonos conectarnos a bases de datos existentes o usar el motor mas conveniente para cada uno de nuestros modelos.

  • Vista : usando templates de Embedded Javascript (.ejs), el cual es similar a lo usado en Django, Rails o PHP y nos permite importar templates de varios archivos.
  • Controladores: estos funcionan usando Express, el cual nos permite simplificar el enrutamiento de los archivos estáticos y las APIs.

Al iniciar nuestra aplicación de Sails.js se creará una carpeta inicial con los archivos necesarios, entre ellos:

  • package.json: aquí se guarda la configuración de npm, te recomiendo editarlo para incluir el autor, la licencia y la dirección a tu repositorio en Github.
  • README.md: sugiero editar este archivo e inlcuir la descripción e instrucciones para las personas que trabajen con tu aplicación.
  • app.js: este le dice a Node.js como iniciar tu archivo, generalmente no es necesario editarlo.
  • Gruntfile.js : Sails.js usa Grunt para mantener actualizado su árbol de dependencias, generalmente no es necesario editarlo.

Adicionalmente se crean varios folders, estas secciones nos permiten enfocarnos en puntos específicos de nuestro desarrollo y mantener todo de forma ordenada, lo cual facilita el integrar nuevos miembros mas adelante.

api

En esta sección almacenamos la mayor parte de la lógica de nuestro backend, el Modelo y el Controlador son definidos por los contenidos de esta carpeta y esta a su vez contiene la siguientes carpetas:

  1. Controllers: estos son archivos de Javascript que contienen la lógica para interactuar con los Modelos y renderizar la Visualización de forma adecuada.
  2. Models: estas son estructuras que almacenan los datos de tu aplicación.
  3. Policies: Esto es Middleware de Express, que se encarga de controlar la seguridad de los Controladores.
  4. Responses: aquí almacenamos la lógica que genera las respuestas del servidor.
  5. Services: son archivos Javascript similares a los Controladores, pero no necesariamente generan una respuesta inmediata al cliente, o simplemente no tiene comunicación directa con él.
  Crea una unidad de disco duro ultrarrápida en memoria para tus juegos o archivos temporales

Son muy útiles para crear tareas o servicios asíncronos, por ejemplo, procesos lentos cuya respuesta es enviada al cliente eventualmente via websocket o email.

assets

Sección en la que vamos a colocar los archivos estáticos de nuestro proyecto; el favicon y el robots.txt los encontramos en la raíz del directorio y el resto los agrupamos en estas carpetas:

  1. images: la usamos para almacenar nuestros assets visuales, por ejemplo transparencias .svg, .webp o .png, así como imágenes .jpg entre otras.
  2. js: en esta colocamos los archivos Javascript para el cliente, por ejemplo las librerías.
  3. styles: aquí puedes colocar tus archivos CSS. Para mejores resultados, te recomiendo usar un precompilador como stylus, de este modo puedes hacer modular tu código y crear automáticamente un CSS para producción con compresión y vendor prefixes.
  4. templates: para almacenar los HTML y JST de nuestra aplicación.

config

En esta sección encontramos archivos Javascript y carpetas que nos permiten personalizar nuestra aplicación de Sails.js según nuestras necesidades.

Tenemos dos carpetas:

  1. env: en esta guardamos las llaves, claves y contraseñas que necesitamos (para conectarnos a las bases de datos), y APIs remotas. Se clasifican en:development.js para el modo de desarrollo.production.js para el modo de producción.
  2. locales: en esta sección guardamos archivos JSON que se usan como diccionario para internacionalizar nuestra aplicación, permitiendo agregar nuevos idiomas con menos esfuerzo y sin perder tiempo buscando e integrando una solución para nuestro proyecto.
  Cuando eres el informático de la familia y todos te piden ayuda para cualquier tontería

Y los siguientes archivos:

  1. local.js: los usamos para definir el puerto y el modo de desarrollo de nuestra aplicación (desarrollo o producción).
  2. cors.js: en esta determinamos la forma en que nuestro servidor manejará las solicitudes CORS; nos ofrece una forma moderna y segura de comunicarnos con datos externos y es más segura que JSONP pues nos permite especificar procedimientos para solicitudes GET, PUT, POST o DELETE.
  3. csrf.js: con este controlamos la seguridad con tokens CSRF, que nos permiten confirmar que las solicitudes que no son de tipo GET provengan exclusivamente desde nuestro servidor, evitando que otros sitios consuman nuestros servicios.
  4. blueprints.js: nos permite definir fácilmente APIs para interactuar con nuestros Modelos.
  5. globals.js: en este archivo definimos las variables globales de nuestra aplicación.
  6. http.js: aquí especificamos detalles de nuestro servidor HTTP, especialmente el middleware y la administración de la caché.
  7. i18n.js: en este archivo ponemos la lista de idiomas que soporta nuestra aplicación.
  8. bootstrap.js: este archivo se ejecuta justo antes de “levantar” nuestra aplicación con el comando lift, el cual nos sirve para definir tareas que necesitamos se ejecuten antes de levantar el servidor.
  9. connections.js: en este archivo especificamos los ajustes necesarios por nuestros adaptadores y básicamente son intermediarios entre nuestra aplicación y las bases de datos, esto nos facilita administrar las conexiones a distintas bases de datos.
  10. log.js: aquí configuramos el nivel de logging de nuestra aplicación, en otras palabras, el nivel de detalle que deseamos registrar sobre los eventos en nuestra aplicación.
  11. models.js: nos permite manejar las conexiones por default que serán incluidas en todos nuestros Modelos.
  12. policies.js: esta nos permite definir políticas de seguridad para nuestros Controladores.
  13. routes.js: en este archivo configuramos la relación entre las rutas de nuestra aplicación y los recursos, esto se hace generalmente después de que se cumplan las políticas de seguridad para los recursos solicitados.
  14. sessions.js: esta configuración nos permite guardar los datos de sesión de cada usuario y aplicarla en Express y en Socket.IO.
  15. sockets.js: lo usamos para personalizar la forma en que nuestro backend se comunica con el usuario por medio de Socket.IO.
  16. views.js: en este podemos personalizar el motor que deseamos usar para definir los templates HTML que serán usados para la Visualización de nuestra aplicación, por ejemplo ejs, jade, underscore y muchos mas.
  Seis aplicaciones gratuitas para aprender robótica y programación

tasks

Se usa para guardar tareas y configuraciónes de Grunt.

views

En esta carpeta almacenamos nuestras Vistas personalizadas, generalmente en formato .ejs.

Ahora ya conoces la estructura de una aplicación de Sails.js, no te pierdas la próxima entrega de esta serie, sobree Sails.js y React.js.

Enlaces relacionados

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad