La gran contribución de PayPal a Node.js: la suite Kraken

  • #nodejs

La suite KrakenJS creada por PayPal ofrece convención y seguridad a Express mediante módulos independientes.

Vamos a empezar explicando qué es Kraken y qué no es:

  • No es un pulpo gigante.
  • No es un framework para Node.js.
  • Es una capa que proporciona seguridad y convención a Express.
  • También proporciona funcionalidades interesantes como un motor de plantillas o i18n.

Creada por PayPal y liberada bajo Apache License v2.0, esta suite viene a rellenar un hueco existente en Express.

KrakenJS, suite de aplicaciones sobre Express

El principal problema de Express es que no hay convención ni estructura, de entrada tendrás toda la aplicación en un solo fichero: app.js. Además será insegura y no dispondrá de elementos básicos que prácticamente hoy en día todas las aplicaciones web podrían necesitar.

KrakenJS intentará solventar eso proporcionando una estructura MVC que, junto con una serie de módulos, forman la suite Kraken.

Módulos de la suite

KrakenJS

KrakenJS (GitHub) es el núcleo de la suite. Su misión es, como ya hemos dicho, proporcionar estructura y convención. La estructura que utiliza es la siguiente:

Ruta Descripción
/config Configuración de la aplicación y del middleware.
/controllers Enrutamiento y lógica de aplicación.
/locales Recursos específicos del idioma.
/models Modelos.
/public Recursos web que están disponibles públicamente.
/public/templates Plantillas de servidor y cliente.
/tests Pruebas unitarias y funcionales.
index.js Punto de entrada a la aplicación.

Para nuestro gusto, estaría genial si el enrutamiento estuviera apartado de la lógica de control y que además, los templates del lado del servidor no fueran accesibles públicamente.

También proporciona un generador tipo Yeoman, de tal manera que mediante un simple comando podemos generar una aplicación, controladores o modelos, entre otras cosas.

Por último, KrakenJS nos facilita mediante el punto de entrada a la aplicación, una serie de filtros como por ejemplo: requestStart, requestBeforeRoute y requestAfterRoute, que nos permitirán añadir funcionalidad en el momento oportuno.

Lusca

Lusca es el módulo de seguridad de la suite Kraken. Funciona como middleware y protegerá nuestra aplicación casi sin esfuerzo por nuestra parte de una serie de amenazas como CSRF, CSP o XSS.

JavaScript
import express from 'express'
import lusca from 'lusca'

const app = express()

app.use(lusca({
  csrf: true,
  csp: { /* ... */ },
  xframe: 'SAMEORIGIN',
  p3p: 'ABCDEF',
  hsts: { maxAge: 31536000, includeSubDomains: true },
  xssProtection: true,
}))

Adaro

Adaro se encarga de renderizar las vistas utilizando el motor de plantillas Dust.

Cabe mencionar que Dust.js es un gran motor de plantillas, abandonado hace 2 años y ahora mantenido por LinkedIn a través de un fork. Lejos de parecerse a Jade, proporciona plantillas asíncronas, compatibilidad con el navegador, rapidez y una sintaxis limpia y clara.

JavaScript
import express from 'express'
import adaro from 'adaro'

const app = express()

app.engine('dust', adaro.dust({ ... })
app.set('view engine', 'dust')

Kappa

No hablaremos aquí de Kappa porque es un proxy para npm que no tiene mucho que ver con la capa de Express.

Makara

Makara es el módulo de internacionalización y localización. Se encarga de proporcionar al motor de plantillas Dust, los paquetes de idiomas disponibles en /locales.

Simplemente añadimos este contexto antes de generar la vista:

JavaScript
res.locals.context = { locality: 'es_ES' }
const data = { name: 'David Bustamante' }
res.render('index', data)

En nuestra plantilla introducimos por ejemplo:

HTML
<h1>{@pre type="content" key="index.greeting"/}</h1>

Y después, en nuestros ficheros de idiomas correspondientes:

index.greeting=Hello {name}!
index.greeting=Hola {name}!

Cuando nuestro querido amigo David entre podrá ver Hola David Bustamante!.

También se puede especificar un idioma por defecto que cargará en caso de que el idioma que solicitamos no exista o esté traducido a medias.

Resumen

Como reza el eslogan del proyecto, el pulpo Paul Kraken proporcionará a Express unos cuantos brazos para ayudar en su tarea.

Seguridad, internacionalización, estructura MVC y un potente motor de plantillas (entre otras cosas), hacen de Kraken una gran opción a la hora de comenzar a crear nuestra nueva app, desde un punto de partida más adelantado del que Express nos concede.

Por cierto, todos los módulos pueden utilizarse por separado sin necesidad de utilizar la suite completa, ya que dependen únicamente de Express.

Compartir en