Sails.js: Una introducción, historia, características y ejemplos
Introducción
Sails.js es un framework moderno de MVC (Modelo-Vista-Controlador) para construir aplicaciones web escalables y en tiempo real utilizando Node.js. Sigue la filosofía de convención sobre configuración, lo que facilita el desarrollo y mantenimiento de aplicaciones sin invertir mucho tiempo en la configuración. Sails.js está construido sobre Express.js e incorpora características como APIs basadas en datos, actualizaciones en tiempo real y una interfaz de línea de comandos poderosa.
Historia
Sails.js fue desarrollado por Mike McNeil y lanzado inicialmente en 2012. Fue inspirado por Ruby on Rails y tenía como objetivo brindar una productividad y facilidad de desarrollo similares al ecosistema de Node.js. Desde su lanzamiento, Sails.js ha ganado popularidad entre los desarrolladores debido a su robustez, escalabilidad y capacidad para construir aplicaciones en tiempo real.
Características
1. Arquitectura MVC
Sails.js sigue el patrón arquitectónico MVC, lo cual ayuda a organizar el código y separar las responsabilidades. El Modelo representa los datos y la lógica de negocio, la Vista maneja la capa de presentación y el Controlador gestiona la interacción entre el Modelo y la Vista.
// Ejemplo: UserController.js
module.exports = {
find: async (req, res) => {
const users = await User.find();
return res.view('user/index', { users });
},
create: async (req, res) => {
const user = await User.create(req.body).fetch();
return res.created(user);
},
};
2. Capacidades en Tiempo Real
Sails.js proporciona capacidades en tiempo real de forma nativa a través del uso de WebSockets y Socket.io. Esto permite a los desarrolladores construir aplicaciones que pueden enviar actualizaciones a los clientes conectados en tiempo real.
// Ejemplo: ChatController.js
module.exports = {
subscribeToRoom: async (req, res) => {
const roomId = req.param('roomId');
sails.sockets.join(req, roomId);
return res.ok({ message: 'Suscrito a la sala.' });
},
sendMessage: async (req, res) => {
const roomId = req.param('roomId');
const message = req.param('message');
sails.sockets.broadcast(roomId, 'newMessage', { message });
return res.ok({ message: 'Mensaje enviado.' });
},
};
3. API de Blueprint
Sails.js proporciona una poderosa API de blueprint que genera automáticamente rutas RESTful y acciones CRUD para tus modelos. Esto facilita la creación, lectura, actualización y eliminación de datos sin tener que escribir código adicional.
// Ejemplo: UserController.js
module.exports = {
// Rutas generadas automáticamente
create: async (req, res) => {
const user = await User.create(req.body).fetch();
return res.created(user);
},
find: async (req, res) => {
const users = await User.find();
return res.ok(users);
},
// Acción personalizada adicional
search: async (req, res) => {
const query = req.param('query');
const users = await User.search(query);
return res.ok(users);
},
};
4. Interfaz de Línea de Comandos (CLI)
Sails.js proporciona una interfaz de línea de comandos (CLI) poderosa que ayuda con la creación de estructuras, generación de código y administración del proyecto. La CLI ofrece comandos para generar controladores, modelos, servicios y mucho más, mejorando la productividad del desarrollador.
# Ejemplo: Generar un nuevo proyecto de Sails.js
$ sails new myproject
# Ejemplo: Generar un nuevo controlador
$ sails generate controller user
# Ejemplo: Generar un nuevo modelo
$ sails generate model user
Ejemplos
Ejemplo 1: Aplicación de Chat en Tiempo Real
// Ejemplo: ChatController.js
module.exports = {
subscribeToRoom: async (req, res) => {
const roomId = req.param('roomId');
sails.sockets.join(req, roomId);
return res.ok({ message: 'Suscrito a la sala.' });
},
sendMessage: async (req, res) => {
const roomId = req.param('roomId');
const message = req.param('message');
sails.sockets.broadcast(roomId, 'newMessage', { message });
return res.ok({ message: 'Mensaje enviado.' });
},
};
En este ejemplo, la acción subscribeToRoom permite a un usuario suscribirse a una sala de chat utilizando WebSockets. La acción sendMessage transmite un nuevo mensaje a todos los clientes conectados en la sala especificada.
Ejemplo 2: Creación de una API RESTful
// Ejemplo: UserController.js
module.exports = {
create: async (req, res) => {
const user = await User.create(req.body).fetch();
return res.created(user);
},
find: async (req, res) => {
const users = await User.find();
return res.ok(users);
},
};
En este ejemplo, la acción create crea un nuevo registro de usuario en la base de datos basado en el cuerpo de la solicitud. La acción find recupera todos los registros de usuario de la base de datos y los devuelve como respuesta.
Para obtener más información y documentación detallada, visita el sitio web oficial: Sails.js