/Adonis.JS

FullStack sin dolor con Adonis.JS

Hacer aplicaciones con Node.JS es doloroso

Admitamos que para hacer una aplicación fullstack de manera tradicional tenemos que instalar muchísimos módulos para echar a andar nuestra idea, módulos que nos permiten conectarnos a bases de datos, mostrar html, tener sockets, tener autenticación, sesiones, jwt, además, inventarnos convenciones o guiarnos de existentes para organizar todo nuestro código, esperar que el proyecto escale razonablemente (generalmente escala de manera irrazonablemente caótica) y esperar, esperar con todo el corazón que nuestra arquitectura sea lo suficientemente sólida para resistir su ciclo de vida esperado. Es doloroso hacer algo en Node.JS incluso usando Express. Modulos y más modulos Express.JS es una base minimalista Hacer una aplicación con Express es comprar una hamburguesa de tamaño infantil y modificarla hasta hacerla un monstruo de 3 pisos con 40 ingredientes extra conservando la carne y el pan. Una base minimalista ¡Meteor.JS es demasiado! Lo admito, a veces un ecosistema que te dé ya todo hecho con convenciones tan estrictas puede ser una desventaja, e incluso es incómodo tener cosas que no usas de su stack ahi en tu proyecto robando espacio de disco lastimando tus sentimientos ingenieriles. Deriamos tener una base sólida con una muy buena propuesta de arquitectura pero lo suficientemente flexible para poder integrar lo que queramos.

Sails, Feathers, Koa, blablabla Todas son muy buenas e implementan su propia base para empezar proyectos grandes, sin embargo todas están basadas en express y sus convenciones muchas veces son propuestas a modo. Usar estas herramientas es como comer las hamburguesas de las que hablé arriba hechas por otras personas que tampoco estaban contentas con la hamburguesa básica. Django, Rails, Laravel, Phoenix… Una base sólida con mucha flexibilidad esta resuelta en otros lenguajes. A veces siento envidia y me gustaría tener algo tan bonito como Django en node, o bien armado como Phoenix de Elixir, me gustaría tener un CLI tan bueno como el de Rails, o tener una base como la de Laravel que trajo buenas prácticas a PHP y que son cómodas y naturales de seguir al escribir el proyecto. A veces me gusta ver al vecino de enfrente con sus frameworks sexys.

¡Es un pájaro!¡Es un avión! ¡¡¡No, es Adonis!!!

Adonis.JS Así es hermano, pare de sufrir en su camino de desarrollador FullStack, Adonis.JS esta aquí para hacernos la vida más fácil, Adonis.JSviene ya con:

  • Un CLI
  • Autenticaciones
  • Sistema MVC
  • Un ORM con modelos, migraciones, factorys y seeds.
  • Soporte incluido para internacionalización i18n
  • Soporte de primera clase para tests
  • Login social
  • Sistema de plantillas
  • Validaciones
  • Servidor de sockets y cliente
  • y muchas cosas más

Y no esta basado en express, esta escrito en Javascript puro y te permite empezar a usar ES6 al escribir tu código, todo sin sacrificar el performance.

¿Cómo lo instalo?

// Instálalo, en la terminal escribe:
$: npm i -g @adonisjs/cli

// Observa lo que Adonis tiene para ti:
$: adonis --help
    

¿Quieres una base para FullStack con soporte para el ORM, plantillas, validaciones y muchas cosas?

$: adonis new MiAsombrosaApp
$: cd MiAsombrosaApp
$: adonis serve --dev

¿Sólo quieres lo necesario para un API? Sin problema

$: adonis new MiAsombrosaAPI --apy-only
$: cd MiAsombrosaAPI
$: adonis serve --dev

¿Sólo quieres el esqueleto y agregarle de poco a poco los módulos que vayas necesitando? Aquí tienes Adonis sin grasa:

$: adonis new MiAsombrosaAppSinGrasa --slim
$: cd MiAsombrosaAppSinGrasa
$: adonis serve --dev

Adonis.JS en acción | Sistema de rutas

const Route = use('Route')

Route.get('/', ( ) => '¡Hola mamá, estoy programando!')
Route.get('/portafolio', 'PortfolioController.index')
// ¿Tienes un controlador con todo un sistema para administrar un recurso (CRUD etc)?
Route.resource('users', 'UserController')

// Agregar middleware de autenticación
Route
  .get('/botonRojo', 'PresidentController.Apocalipsis')
  .middleware('auth')

Adonis.JS en acción | Active Record ORM

Podemos crear Modelos, factorys, seeds y migraciones de manera muy fácil:

$: adonis make:model Cupcake --migration

En database/migrations/blabla_cupcake.js

const Schema = use('Schema')

class CupcakesSchema extends Schema {
  up () {
    this.create('cupcakes', (table) => {
      table.increments()
      table.string('name', 80).unique()
      table.charset('description', 150)
      table.integer('price')
      table.timestamps()
    })
  }

  down () {
    this.drop('cupcakes')
  }
}

module.exports = UsersSchema
    

Corremos las migraciones con:

$: adonis migration:run

Podemos ver el estatus de las migraciones con:

$: adonis migration:status

El modelo lo podemos ver en app/Models/Cupcake.js y podemos crear relaciones con otros modelos:

const Model = use('Model')

class Cupcake extends Model {
  sells() {
    return this.hasMany('App/Models/Sell')
  }
}

module.exports = User

En la ruta (aunque podría ir mejor en el controlador):

const Route = use('Route')
const Cupcake = use('App/Models/Cupcake')
Route
  .get('cupcakes', async () => {
    returnawait Cupcake.all()
  })

Para verlo en una plantilla Edge de Adonis debemos llamarla en la ruta y crear el archivo edge en resources/views:

  • start/routes.js

    Route
    .get('cupcakes', async ({view}) => {
    const cupcakes = await Cupcake.all()
    
    return view.render('ListaCupcakes', {cupcakes})
    })
  • resources/views/ListaCupcakes.edge

    <ul>
    @each(cupcake in cupcakes)
      <li>
        Nombre: {{ cupcake.name }} | 
        Precio : {{ cupcake.price }}
      </li>
    @endeach
    </ul>

Recursos para aprender más:

Adonis JS tiene muchos recursos gratuitos de calidad para aprenderlo y sacarle jugo, pueden verlos aquí:

Documentación oficial Recursos en video Tutoriales escritos

Creo que tenemos un gran framework javascript que nos permitirá tener proyectos con buenas prácticas, que sean escalables y nos permitan ser más productivos.

Mándame un comentario si quieres conocer más o conoces otros recursos geniales sobre AdonisJS.

Yoshua Díaz

Yoshua Díaz

FullStack Dev | Escritor | Creativo | Comediante | Introvertido Excéntrico

Leer más