Sails.js es un framework para Node.js . Está realizado bajo el framework Express , incluyendo varias capas de abstracción para hacer un desarrollo más fácil. Sails viene instalado con un potente ORM / ODM llamada waterline , una herramienta de almacén de datos agnóstico que simplifica drásticamente la interacción con una o más bases de datos. Proporciona una capa de abstracción en la parte superior de la base de datos subyacente, lo que le permite consultar fácilmente y manipular sus datos sin necesidad de escribir código de integración específica del proveedor. La última versión de Sails viene preparado para trabajar Postgres , Mongo , MySQL , Redis , y en disco. Entre otras cosas, nos facilita en gran medida el desarrollo de APIs REST , servidores de archivos, seguridad y websockets para menajar y realizar peticiones en tiempo real gracias a Socket.io .

Está creado con la filosofía "Convención sobre Configuración" o CoC, por sus siglas en inglés; esto significa que nos permite enfocarnos en el desarrollo de la idea , ahorrándonos mucho tiempo en configuración inicial y es un complemento ideal para frameworks como AngularJS , BackboneJS o ReactJS .

Esto se logra gracias a que SailsJS sigue un conjunto cuidadosamente selecto de convenciones modernas, automatizando una gran parte del proceso de desarrollo.

Instalación

Para instalar Sails, es bastante simple. Los requisitos son tener Node.js instalado y también la NPM , que viene con Node. Entonces uno debe emitir el siguiente comando en el terminal:

sudo npm install sails -g


Crear un Nuevo Projecto

Con el fin de crear un nuevo proyecto de Sails, se utiliza el siguiente comando:

sails new myProject


Sails generará una nueva carpeta con el nombre del proyecto y añadirá todos los archivos necesarios para tener una aplicación básica construida . Para ver lo que se ha generado, acaba de obtener en la carpeta del proyecto y ejecutar el servidor Sails emitiendo el siguiente comando en el terminal:

sails lift


Sails usa por defecto el puerto 1337, por lo que si visita http://localhost:1337 debe obtener la página index.html por defecto de Sails.

Carpetas Generadas

Ahora, vamos a echar un vistazo a lo que Sails genera para nosotros . En la carpeta del proyecto se han creado los siguientes archivos y subcarpetas:

1. Carpeta 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:

  • La carpeta controllers contiene los controladores de la aplicación. Estos son archivos de Javascript que contienen la lógica para interactuar con los Modelos y renderizar la Visualización de forma adecuada.
  • En la carpeta models se almacenan los modelos de la aplicación. Estas son estructuras que almacenan los datos de tu aplicación.
  • En la carpeta de policies se almacenan las reglas de acceso de usuario de aplicación. Esto es Middleware de Express, que se encarga de controlar la seguridad de los Controladores.
  • En la carpeta de responses se almacenan la lógica que genera las respuestas del servidor.
  • En la carpeta de services se almacenan los servicios api implementadas por la aplicación. 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. 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.

2. Carpeta Assets

La carpeta de activos contiene subdirectorios para los archivos JavaScript y CSS que deben ser cargados en tiempo de ejecución. Este es el mejor lugar para almacenar bibliotecas auxiliares utilizados por la aplicación. 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:

  • images : la usamos para almacenar nuestros assets visuales, por ejemplo transparencias .svg, .webp o .png, así como imágenes .jpg entre otras.
  • js : en esta colocamos los archivos Javascript para el cliente, por ejemplo las librerías.
  • 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.
  • templates : para almacenar los HTML y JST de nuestra aplicación.

3. Carpeta config

Esta es una de las carpetas importantes. Sails está diseñado para ser flexible. Asume algunas convenciones estándar, sino que también permite al desarrollador cambiar la forma de que sails configura la aplicación creada para adaptarse a las necesidades del proyecto . La siguiente es una lista de los archivos de configuración presentes en la carpeta config:

  • Carpeta env : - Aquí 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.
  • Carpeta 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.
  • local.js : los usamos para definir el puerto y el modo de desarrollo de nuestra aplicación (desarrollo o producción).
  • 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.
  • 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.
  • blueprints.js : nos permite definir fácilmente APIs para interactuar con nuestros Modelos.
  • globals.js : en este archivo definimos las variables globales de nuestra aplicación.
  • http.js : aquí especificamos detalles de nuestro servidor HTTP, especialmente el middleware y la administración de la caché.
  • i18n.js : en este archivo ponemos la lista de idiomas que soporta nuestra aplicación.
  • 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.
  • 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.
  • 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.
  • models.js : nos permite manejar las conexiones por default que serán incluidas en todos nuestros Modelos.
  • policies.js : esta nos permite definir políticas de seguridad para nuestros Controladores.
  • 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.
  • sessions.js : esta configuración nos permite guardar los datos de sesión de cada usuario y aplicarla en Express y en Socket.IO.
  • sockets.js : lo usamos para personalizar la forma en que nuestro backend se comunica con el usuario por medio de Socket.IO.
  • 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 más.

4. Carpeta modules

Aquí se carga todas las dependencias que tengamos en el fichero package.json . Si instalamos una nueva dependencia que queramos utilizar como fs (para leer/escribir ficheros) deberemos ponernos en el path donde ejecutamos sails lift y hacemos lo siguiente:


npm install fs --save


Si alguna vez borramos la carpeta node_modules tendremos que volver a instalar todo de la siguiente manera:


npm install


5. Carpeta tasks

Se usa para guardar tareas y configuraciones de Grunt .

6. Carpeta views

Las vistas de la aplicación se almacenan en esta carpeta . En cuanto a su contenido, nos damos cuenta de que las opiniones se generan por defecto como, JavaScript incrustado, EJS. Además, la carpeta contiene vistas para el manejo de errores (404 y 500) y también el archivo de diseño, layout.ejs, y los puntos de vista para el controlador de la casa, que se genera mediante Sails.