Introducción a NodeJS + SailsJS

Hola a toda la comunidad! Mi nombre es Bruno, y llevo un tiempo en DesdeLinux como usuario. Es hora de que haga mi primera publicaciones en esta comunidad 🙂

Hoy les traigo una guía sobre NodeJS y Sails.js

Node.js

Es un entorno de programación, basado en el lenguaje Javascript con una arquitectura orientada a eventos, ideal para la programación asincrónica. Node, está basado en el motor V8 de google.
Mantiene una comunidad activa open source, que han escrito muchos módulos para facilitar nuestro desarrollo.
Una de ellas es Socket.io (Permite al servidor enviar actualizaciones en tiempo real al cliente, por ejemplo el seguimiento de un GPS)

¿Para qué sirve?

Node está diseñado para las situaciones en el que el tráfico es demasiado grande, haciendo que la lógica del servidor y el procesamiento no sean necesariamente mayores. Y no sólo eso, sino que en tiempo real y con una gran escalabilidad!

¿Por qué Node?

1) Es open source.
2) Si alguna vez pensaste en usar un único lenguaje tanto del lado del servidor como del cliente, aquí la solución.
3) Escalabilidad y Concurrencia.
4) Etc.

Sails.js

Elegí sails, por las siguientes características además de que a mi punto de vista fue el más legible en cuanto a código. Ojo! existen MUCHOS frameworks para Node, como lo es Express, Angular, Geddy, etc.

Captura de pantalla - 080913 - 13:21:50

¿Qué es Sails?

Es un framework  MVC que imita el modelo  de ruby on rails (Si, escucharon bien :D) para la creación de pequeñas o grandes aplicaciones de forma rápida, sencilla y segura. Además cuenta con soporte para los requisitos de aplicaciones modernas. No importa que base de datos utilices, Sails provee una capa de abstracción, que hace que la elección de la misma, le sea indiferente. Sails cuenta con:

– La capacidad de crear RESTfull JSON API de forma automática.
– Trae incorporado el modulo Socket.io.
– Genera rutas automáticas para sus controladores.
– Provee sistema de autenticación de usuarios y control de acceso basado en roles.
Grunt como Task Runner (Tareas automáticas como minificación, compilación, testing, etc)
– Assets: Todos los archivos de sus correspondientes directorios (css,js) son unificados en un único archivo y minificados, para reducir considerablemente la carga de la página y la cantidad limitada de peticiones del navegador.

Instalación de Node.Js

El turorial lo realicé con Xubuntu 13.04.

sudo apt-get install python-software-properties python g++ make
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs

Instalación de Sails.Js

Última versión estable:
sudo npm -g install sails

Llegados a este punto sin errores, creamos un nuevo proyecto! 😀

Crea el esqueleto de directorios:
sails new testProject

Ingresamos a nuestro Proyecto:
cd testProject

Iniciamos el servidor:
sails lift

Yeeeeeeeeeeah! ingresamos en http://localhost:1337/

Captura de pantalla - 080913 - 13:02:34

La estructura de nuestro directorio debería quedar así:
Captura de pantalla - 080913 - 13:07:57

API:
– Controladores
– Adaptadores
– Modelos
– Políticas
– Servicios

ASSETS:
– images
– js
– styles
favicon
robots

CONFIG:
– locales
404.js, 500.js …..
routes.js
session.js
sockets.js ……..

NODE_MODULES:
– ejs (motor de plantillas)
– grunt
– optimist
– sails-disk

VIEWS:
– Home (aquí se encuentre la plantilla de la raiz, localhost)
– 404.ejs
– 500.ejs
– layout.ejs (Para los que usaron rails, layouts.ejs se comporta igual que layouts.html.*)

EJS (Embedded Javascript) Es un motor de plantillas, pero no el único. Particularmente me gusta mas JADE

FIN

Hasta aquí mis conocimientos, y espero haber sido de ayuda para muchos… Soy nuevo en esta tecnología por lo que cualquier crítica constructiva es bienvenida 🙂

Este post surgió realizarlo, porque me encuentro desarrollando una especie de red psicosocial (Nada de otro mundo). Con fines de aprender, y pocos recursos. la idea es realizar también un servidor casero que la soporte (Seguramente haga un tutorial de ello) Como dije antes, los recursos son pocos, por lo que la optimización es muy importante. (y aunque no lo fueran también ^^)


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   Arthur Shelby dijo

    Me sorprende lo fiel que emula a RoR, aunque muchos odian a RoR por su bajo rendimiento (sin configurar) la limpieza de código marca tendencia.

    Muy interesante el tema, espero lo sigas desarrollando, felicidades.

    1.    nano dijo

      Yo no odio RoR la verdad, la cosa es que la filosofía de ruby de «hay muchas maneras de hacer la misma cosa» suele ser un problema porque no todas son realmente las mas eficientes y cuando quieres resolver una duda, en muchos casos tienes ese problemita en el que todos te responden con una manera distinta de hacer lo mismo y sueles confundirte mas D:

      Respecto a esto de frameworks para Node, pues tampoco es para cosas enormes o grandes, Node se usa junto a otros frames como Django para cosas puntuales, creo que el ejemplo de Mejorando.la es así, arman todo el sitio y manejo de sus bases de datos con Django pero las cuestiones en tiempo real se las dejan a Node, aunque no estoy seguro así que no puedo hablar demasiado sobre eso.

      1.    jamin-samuel dijo

        Creo que es así como vos decís, usan Django pa la base del sitio y Node para las cosas en tiempo real … Bueno al menos es lo que siempre le escucho decir a freddy vega

        1.    Bruno Cascio dijo

          NodeJS no es como Django ni como PHP, ni ruby. Sino que es un servidor tal como Apache, Nginx, etc

          Sails es el framework que hace uso de nodejs y express(otro framework) junto con algunos modulos como socket.io, para la creacion de aplicaciones web.

          Saludos!

          1.    Arnoldo R L F dijo

            entonces si quiere incluir un chat hecho con nodejs con una pagina en pythoncon Django(para seguir con el ejemplo de mejorando.la), tendría que usar un frame, o asignar a apache(si ese es el caso, no tengo idea de que servidor usa python) la ruta http://miweb.com y a node.js http://miweb.com/chat y comunicarlos

  2.   jamin-samuel dijo

    Oye que super interesante ….

    Lo que no termine de etender es para que se usa Node JS para la web ??

    1.    Arnoldo R L F dijo

      es una alternativa a apache, con la ventaja de ser en tiempo real(aplicaciones que están comunicándose todo el tiempo y no solo cuando se realiza la petición).

      1.    David Gómez dijo

        NodeJS no es una alternativa (o reemplazo) a Apache, NGINX o cualquier otro servidor web. NodeJS es un intérprete de JavaScript para el servidor, permitiendo crear aplicaciones con este lenguaje que de otra forma requerirían el uso de lenguajes como Java, Python, Ruby o PHP.

        1.    Bruno Cascio dijo

          Si, tal vez me expresé mal. Lo que quise hacer llegar, es que node.js ejecuta su propio servidor y no necesita de 3ros, para funcionar (apache, nginx, cherokee, etc)

          Saludos!

  3.   Arnoldo R L F dijo

    muy bueno, espero mas tutoriales para poder seguir a node.js y hacer algo en tiempo real

    1.    Bruno Cascio dijo

      Acá te dejo un libro de 200 páginas, con una introducción a Node.js a través de Koans. Tiene una into a Node.js, y la «resolución» de una parte de un problema planteado (el ejemplo es twitter) con Express como framework de cabecera…..

      http://nodejskoans.com/

      PD: Sails está hecho en Base a Express, por lo general la mayoria lo están.

      Saludos!

  4.   elav dijo

    Excelente aporte Bruno.. Bienvenido 😀

    1.    Bruno Cascio dijo

      Gracias a vos y toda la comunidad por dejar ser parte de la misma 🙂 Saludos!

  5.   AurosZx dijo

    Muy interesante Bruno 🙂

    1.    Bruno Cascio dijo

      Gracias!

  6.   La mujer esponja dijo

    Excelente artículo. Muchas gracias.

    Actualmente utilizo sails en algunos de mis proyectos. Me gustaría preguntarte donde puedo conseguir mas información sobre el control de acceso basado en roles de sails, a ser posible en español, pero si no, en inglés. Me gustaría añadir control de acceso a una de mis páginas pero quiero establecer permisos para unos usuarios a partir de una determinada ruta y a otros a partir de otra ruta. Es eso posible con sails? No encuentro mucha información al respecto.

    Gracias y felicidades por el artículo.

    Un saludo
    Elvira.

    1.    Bruno Cascio dijo

      Hola Elvira!

      Con respecto a lo que mencionas, sea Sailsjs o cualquier otro framework, lo que planteas està relacionado con el modelado de los datos y las restricciones que el sistema imponga.

      Podrías crear algo como «grupos» (roles) con diferentes permisos y a cada usuario asociarlo a uno de ellos.

      Particularmente en sails se llaman «policies» y puedes verlo aquì: http://sailsjs.org/#/documentation/concepts/Policies

      Saludos y gracias por tu comentario!

      1.    La mujer esponja dijo

        Muchas gracias Bruno. Con tus indicaciones, encontré una solución elegante. Un saludo