La guía completa de los frameworks de Node.js

Node.js es un tiempo de ejecución de JavaScript, construido sobre el motor de JavaScript V8 de Chrome, que es adecuado para implementar aplicaciones de escritorio y de servidor. Node.js utiliza un modelo de E / S sin bloqueo controlado por eventos que lo hace liviano y eficiente en comparación con los servidores con subprocesos, como Apache, IIS y su servidor Java típico.

Si bien puede implementar un servidor web o una aplicación completamente en código Node.js simple, un marco puede reducir en gran medida la cantidad de código que necesita escribir. En esta guía, analizamos la gama de marcos disponibles para el desarrollador de Node.js.

Comenzamos con frameworks minimalistas similares a Sinatra como Express, pasamos a frameworks más obstinados al estilo Rails como Sails.js, luego a frameworks full-stack con andamios y bibliotecas de persistencia como Meteor. Finalmente, cubrimos marcos de API REST como LoopBack y algunas "otras" bibliotecas para propósitos que caen fuera de nuestras categorías principales (como ORM, IoT y generación de sitios estáticos).

Tenga en cuenta que las clasificaciones no están bien separadas. Hay varios marcos que podrían considerarse pertenecientes a múltiples categorías.

Tenga en cuenta que hay más proyectos MVC de Node.js de los que he enumerado aquí. En algunos casos eliminé proyectos que ya no están activos. En otros, eliminé marcos que nunca atrajeron un interés significativo de los desarrolladores a pesar de la actividad continua. Mi objetivo no es informarle sobre todos los proyectos posibles, sino ayudarlo a identificar proyectos que podrían valer la pena su tiempo de evaluación.

Marcos MVC para Node.js

MVC (model-view-controller) es un paradigma destinado a dividir la funcionalidad de una aplicación web o de escritorio de forma limpia. El modelo gestiona la estructura de datos subyacente. La vista gestiona lo que se muestra al usuario. Y el controlador gestiona lo que sucede en respuesta a las solicitudes de los usuarios.

Rails es un marco web basado en MVC con todas las funciones y "opiniones" creado en 2004 por David Heinemeier Hansson (alias DHH) para darle a Ruby una forma de establecer una presencia en la web. Rails asume que estás usando una base de datos, valora la convención sobre la configuración y escala bien. Los frameworks MVC de Node.js similares a Rails son los que tienen todas las funciones.

Sinatra es un marco web basado en MVC básico y menos obstinado que fue creado en 2007 por Blake Mizerany y actualmente es mantenido por Konstantin Haase. Sinatra adoptó el enfoque opuesto de Rails en el sentido de que solo tiene lo que necesita para una aplicación web, básicamente rutas para poner su aplicación en la web con un DSL (lenguaje específico de dominio) sobre una capa de “rack”. Rack es una capa de abstracción basada en Node.js EventEmittery proporciona una forma sencilla de gestionar el soporte de clústeres.

Los marcos MVC de Node.js similares a Sinatra son los que comienzan de manera simple y le permiten agregar componentes según sea necesario. Muchos de los marcos MVC de Node.js similares a Sinatra, de hecho, valoran la convención sobre la configuración, por lo que la línea entre estos y los marcos similares a Rails no siempre es clara.

Vídeo relacionado: consejos y trucos de Node.js

En este video explicativo, aprenda varias técnicas que pueden mejorar su experiencia de desarrollo de Node.

Marcos MVC similares a Sinatra para Node.js

Dieta

Diet se anuncia a sí mismo como un marco web Node.js pequeño y modular que es bueno para crear aplicaciones y API rápidas y escalables. Un servidor Diet básico se parece mucho a un servidor Express básico:

// Crea una aplicación

  var server = require ('dieta')

  var app = servidor ()

  app.listen ('// localhost: 8000')

// Cuando se solicita // localhost: 8000 /, responda con "¡Hola mundo!"

  app.get ('/', function ($) {

  $ .end ('¡Hola mundo!')

  })

Diet tiene una estructura que admite alojamiento virtual sin ningún módulo o configuración adicional. Las instancias de servidores Diet funcionan como hosts virtuales. Solo haz que escuchen en diferentes puertos.

El enrutamiento en Diet no solo maneja rutas específicas con funciones anónimas, como en el app.get()ejemplo anterior, sino que también puede establecer una canalización de middleware:

// Registra las funciones de middleware para la ruta de carga

  app.post ('/ cargar / imagen', cargar, recortar, guardar, finalizar)

Node.js por defecto tiene dos argumentos requesty response, al crear un servidor HTTP (s) usando http.createServer(). La dieta combina estos dos objetos en un solo objeto de señal que está representado por un signo de dólar $. Puede ver en el app.get()ejemplo anterior que el objeto de señal es el argumento de la función que maneja las getsolicitudes en la ruta raíz. Diet también admite módulos Node.js y puede usarlos como middleware, como se muestra en el app.post()ejemplo anterior.

Rápido

Express es un marco de aplicación web Node.js mínimo y flexible, que proporciona un conjunto sólido de funciones para crear aplicaciones web híbridas, de varias páginas y de una sola página. La API Express se ocupa de la aplicación web, las solicitudes y respuestas HTTP, el enrutamiento y el middleware. A partir de Express 4.x, el middleware admitido para Express reside en varios repositorios separados, que se enumeran en el repositorio de Connect.

Han aparecido varias bifurcaciones y complementos para Express, incluidos Locomotive, Hapi y Koa. Koa fue creado por uno de los principales contribuyentes de Express.

Aunque Express es más antiguo y tiene una huella más grande en comparación con sus vástagos, todavía tiene una comunidad más grande y más estabilidad que cualquiera de ellos. Constantemente veo Express incorporado en otros frameworks y herramientas sin comentarios, como si fuera la única opción posible para construir un servidor web en Node.js.

// crea una aplicación express

const express = require ('express')

aplicación constante = express ()

app.get ('/', function (req, res) {

res.send ('¡Hola mundo!')

})

app.listen (3000, function () {

console.log ('¡Aplicación de ejemplo escuchando en el puerto 3000!)

})

Plancha

Flatiron es parte del paquete de herramientas Nodejitsu Node. Los autores consideran que Flatiron son dos cosas: primero, una iniciativa para construir una colección de herramientas desacopladas con un alto estándar de calidad y rendimiento. Y segundo, un marco de desarrollo de aplicaciones web de pila completa que empaqueta estas herramientas para facilitar el desarrollo de aplicaciones isomórficas y basadas en flujo.

Flatiron es similar a Sinatra en el sentido de que todo lo que necesita hacer para usarlo como servidor web es requirecrear una instancia de una aplicación y usar los complementos http, configurar algunas rutas e iniciar la aplicación, como se muestra en la captura de pantalla a continuación.

Otras piezas de la suite complementan la funcionalidad de Flatiron. Por ejemplo, Broadway expone una API de "complemento" simple, que sustituye a la inversión del registro de control utilizado por otros marcos de Node MVC. Union es un núcleo de middleware híbrido con búfer / transmisión, que es compatible con versiones anteriores de Connect. Union es la pieza que suministra el complemento http.

// crea una aplicación de plancha

var flatiron = require ('flatiron'), 

  aplicación = flatiron.app;

app.use (flatiron.plugins.http);

app.router.get ('/', function () {

  this.res.writeHead (200, {'Content-Type': 'text / plain'});

  this.res.end ('¡Hola mundo! \ n');

});

app.start (8080);

Hapi

Hapi es un marco de trabajo centrado en la configuración fácil de usar con soporte integrado para validación de entrada, almacenamiento en caché, autenticación y otras instalaciones esenciales para crear aplicaciones web y de servicios. Hapi permite a los desarrolladores centrarse en escribir lógica de aplicación reutilizable a través de un enfoque altamente modular y prescriptivo. Hapi fue desarrollado por Walmart Labs y es una buena opción para equipos grandes y proyectos grandes.

Hapi se construyó originalmente sobre Express, pero luego se rediseñó para ser independiente. Como lo expresaron sus creadores, Hapi se creó con la idea de que la configuración es mejor que el código y que la lógica empresarial debe aislarse de la capa de transporte. En el siguiente ejemplo, observe lo clara y limpia que aparece en el código la configuración de las rutas del servidor.

// crea un servidor hapi

var Hapi = require ('hapi');

var server = new Hapi.Server (3000);

server.route ([

  {

    método: 'GET',

    ruta: '/ api / items',

    controlador: función (solicitud, respuesta) {

      responder ('Obtener ID de artículo');

    }

  },

  {

    método: 'GET',

    ruta: '/ api / items / {id}',

    controlador: función (solicitud, respuesta) {

      responder ('Obtener ID de artículo:' + request.params.id);

    }

  },

Koa

Koa es un marco web más nuevo diseñado por el equipo detrás de Express, pero independiente del código Express. Koa pretende ser una base más pequeña, más expresiva y más sólida para las aplicaciones web y las API. Koa usa generadores ES6 para middleware en lugar de devoluciones de llamada de Node.js. La siguiente es una aplicación Koa "Hello, World" que usa un generador, que hace una yield nexttransferencia de control al siguiente generador:

var koa = require ('koa');

var app = koa ();

// tiempo de respuesta x

app.use (función * (siguiente) {

  var start = nueva fecha;

  rendimiento siguiente;

  var ms = nueva fecha - inicio;

  this.set ('X-Response-Time', ms + 'ms');

});

// respuesta

app.use (function * () {

  this.body = 'Hola mundo';

});

app.listen (3000);

Hay una diferencia entre los generadores de middleware que usa Koa y las devoluciones de llamada que usan Express y Connect. La implementación de Connect simplemente pasa el control a través de una serie de funciones hasta que una regresa, mientras que Koa produce "aguas abajo", luego el control fluye hacia atrás "aguas arriba".

En el ejemplo anterior, el tiempo de respuesta x "envuelve" el generador de respuesta, con la yield nextdeclaración que marca la llamada. El rendimiento es más flexible que las llamadas a funciones explícitas, ya que facilita la inserción de otro generador en la secuencia, por ejemplo, un registrador web entre el temporizador y la respuesta.

Locomotora

Locomotive es un marco web para Node.js que admite patrones MVC, rutas RESTful y convención sobre la configuración (como Rails), mientras se integra a la perfección con cualquier motor de base de datos y plantilla. Locomotora se basa en Express y Connect.

Locomotive agrega a Express una estructura similar a Ruby-on-Rails, que puede ver en la imagen a continuación. Las vistas de locomotoras son a menudo archivos JavaScript incrustados (html.ejs), como se muestra aquí, pero Locomotive también es compatible con Jade y los otros motores de plantilla compatibles con Express. La funcionalidad REST está controlada por rutas, como suele ser el caso en los servidores basados ​​en Express. Puede usar cualquier base de datos y capa ORM que desee con Locomotive. La guía demuestra el uso de MongoDB con Mongoose, así como el uso de Passport para la autenticación de usuarios.

Total.js

Total.js es un marco del lado del servidor con todas las funciones para Node.js, escrito en JavaScript puro, similar a Laravel de PHP o Django de Python. La plataforma Total.js es una colección de bibliotecas, paquetes y productos completos creados con Total.js.

Total.js se parece más a Sinatra que a Rails porque es modular y porque es independiente de los IDE, las bases de datos y los marcos del lado del cliente. Se puede implementar un servidor web mínimo Total.js con el siguiente código:

require ('total.js');

F.route ('/', function () {

    this.plain ('¡total.js es realmente bueno!');

});

F.http ('depurar');

Vídeo relacionado: consejos y trucos de Node.js

Marcos MVC similares a rieles para Node.js

Adonis

Adonis es un marco MVC para Node.js construido alrededor de casos de uso prácticos. Admite la inyección de dependencias y tiene un contenedor de IoC (inversión de control) ajustado para ayudarlo a resolver y simular dependencias. Adonis proporciona una herramienta CLI para montar y generar un proyecto con todas las dependencias necesarias.

Entre las características de Adonis se encuentran un ORM (Lucid) y la implementación del patrón de diseño de registro activo; una capa de autenticación incluida con sesiones, JWT, autenticación básica y tokens API personales; y una implementación de controladores como clases ES2015. Los generadores ES2015 eliminan las devoluciones de llamada desordenadas que son comunes en JavaScript más antiguo. El siguiente código recupera todos los usuarios de la base de datos y los devuelve como JSON:

const Ruta = use ('Ruta')

const Usuario = use ('Aplicación / Modelo / Usuario')

Route.get ('/', función * (solicitud, respuesta) {

  usuarios const = rendimiento User.all ()

  response.json (usuarios)

})

CompuestoJS

La fórmula detrás de CompoundJS es Express + estructura + extensiones. Aquí, la estructura es el diseño estándar de los directorios y las extensiones son módulos de Node.js que agregan funcionalidad al marco. El objetivo es proporcionar una interfaz obvia y bien organizada para el desarrollo de aplicaciones compatibles con Express. Esto significa que todo lo que funciona con Express funcionará con CompoundJS.

Puede generar aplicaciones de esqueleto CompoundJS desde la CLI:

npm instalar compuesto -g

compuesto init todo-list-app

cd todo-list-app && npm install

nodo.

El sitio escucha en // localhost: 3000 / de forma predeterminada. Puede continuar agregando andamios según los modelos con el compound generate scaffoldcomando.

Geddy

El marco de Geddy implementa MVC para Node.js de una manera extremadamente similar a Rails, incluso hasta la estructura del directorio, la capacidad de abrir una consola REPL en el contexto de la aplicación y un script generador que puede usar para crear aplicaciones, recursos andamios o modelos y controladores desnudos. El andamio puede generar opcionalmente plantillas EJS, Jade, Handlebars, Moustache y Swig.

El geddy jakecomando puede ejecutar varias maketareas de Jake (JavaScript ) en el contexto de la aplicación actual, con acceso completo a los modelos. Esto es útil para tareas auxiliares como probar, inicializar la base de datos de desarrollo y listar rutas.

Kraken

Kraken, un proyecto de código abierto de PayPal, es una capa segura y escalable que extiende Express proporcionando estructura y convenciones, al igual que Locomotive. Aunque Kraken es el pilar principal de su marco, los siguientes módulos también se pueden utilizar de forma independiente: Lusca (seguridad), Kappa (NPM Proxy), Makara (LinkedIn Dust.js i18N) y Adaro (LinkedIn Dust.js Templating).