AdonisJS: el mejor marco NodeJS de 2017

Hace unos seis meses estaba buscando una alternativa para SailsJS: un MVC Framework para nodo. Desafortunadamente, Sails apestaba bastante en algunas cosas: era lento en las solicitudes POST, no admitía muchas funciones de Postgres como las transacciones y carecía de algunas otras características (por ejemplo, descritas aquí). Pero lo peor de todo es que no recibió una actualización importante en los últimos tres años.

Entonces comenzamos a buscar algo para mover nuestros proyectos nodeJS. Hemos probado Koa.js (pero le faltaban muchas cosas), Meteor.js (realmente no necesitamos una solución todo en uno, solo API), Loopback (demasiada magia) y algunos más.

Hasta que me topé con AdonisJS. Para ser honesto, aunque el marco tiene 2.5k de inicio en github, no fue fácil de encontrar. Pero de inmediato me enamoré. Trataré de explicar por qué.

Pros

1. Mirando la estructura de carpetas y la lógica detrás, es casi idéntico a un marco PHP súper popular: Laravel. Y Laravel tiene una buena estructura pensada, que le permite mantener las cosas claras. Entonces, si alguna vez has trabajado con él, aprenderás Adonis muy rápido.

2. Su ORM está hecho con bases de datos SQL en mente, como Postgres o MySQL. Crea consultas SQL eficientes y se basa en una idea de registro activa. Su generador de consultas es fácil de aprender y nos permite crear consultas simples rápidamente. Por ejemplo:

const bicycles = yield Bicycle.query (). whereIn ('locationId', locationIds) .with ('locks'). orderBy ('label', 'asc'). fetch ()

Pero incluso cuando necesitamos cosas más complicadas como migraciones, transacciones, uniones, tiradas o consultas completamente de "lenguaje SQL nativo", todo está ahí y es fácil de usar. En cuanto a los amantes de MongoDB, adonis también lo admite.

3. Tiene una práctica extensión de validación. Facilita la escritura de reglas, por ejemplo:

reglas const = {
  nombre de usuario: 'requerido | único: usuarios',
  correo electrónico: 'requerido | correo electrónico | único: usuarios',
  contraseña: 'requerido | confirmado',
  group: 'existIn: Group'
}
validación constante = rendimiento Validator.validate (userData, User.rules)
if (validation.fails ()) arroja nuevos Errores. Validación (validación)

Estas comprobaciones pueden ser sincrónicas o asincrónicas, pueden acceder a la base de datos o lo que sea necesario. Y se puede extender muy fácilmente, por ejemplo, hemos escrito un cheque para probar si existe un registro en nuestra base de datos.

4. ¡Solo un bono! Personalmente, me encanta cómo Adonis usa y utiliza las funciones del generador. Por ejemplo:

// Forma clásica de espagueti
Users.all ((err, users) => {
  users.bicycles (). fetch ((err, bicycles) => {
    res.send ({usuarios, bicicletas})
  })
})
// Promesa
dejar usuarios = nulo
Users.all ()
.then (fetchedUsers => {
  usuarios = fetchedUsers
  return users.bicycles (). fetch ()
})
.then (bicicletas => {
  res.send ({usuarios, bicicletas})
})
// Generador (también conocido como AdonisJS)
// El rendimiento detiene la ejecución del código hasta que finaliza la función asincrónica
usuarios constantes = rendimiento Usuarios.todos ()
const bicycles = yield users.bicycles (). fetch ()
res.send ({usuarios, bicicletas})

¡Hace que el código sea mucho más claro! No más funciones o promesas incluidas, solo código simple sin tabulación.

Contras

  1. No hay configuración de prueba predeterminada. Escribir código sin pruebas es una forma muy ingenua de desarrollar :-) Así que tuvimos que invertir tiempo en implementar nuestra propia configuración de prueba en Adonis. Upd: la configuración de prueba oficial y el tutorial serán presentados en el siguiente Adonis 4.0
  2. Debido a que no hay muchos contribuyentes y usuarios, a veces aún puede detectar un error en las bibliotecas principales. Algunos de ellos son bastante obvios :-)
  3. Aunque los documentos son buenos, la comunidad sigue siendo pequeña. No hay muchas respuestas en StackOverflow y no hay muchos tutoriales (excepto el oficial)

En lugar de conclusión

Estamos utilizando AdonisJS en producción durante los últimos seis meses. Es estable y rápido. ¡Lo amamos!

Si está buscando un marco moderno Node.js con ES6, soporte de Postgres y una buena estructura, consulte Adonis.js

P. S. Mi último proyecto: https://pingdisco.com es 100% adonisjs, es una herramienta de monitoreo de tiempo de actividad gratuita. Intente crear una cuenta allí (solo se necesita un campo para completar) y vea lo rápido y fluido que es.

P. P. S. Y si necesita ayuda o tiene problemas con el marco, no dude en enviarme un mensaje en Codementor. También hago sesiones de tutoría donde puedo mostrarle los conceptos básicos y algunos trucos geniales de Adonis.