AdonisJS - o melhor framework NodeJS de 2017

Cerca de seis meses atrás, eu estava procurando uma alternativa para o SailsJS - um MVC Framework para nó. Infelizmente, o Sails sugou bastante em algumas coisas - era lento nas solicitações do POST, não suportava muitas funções do Postgres, como transações, e faltava alguns outros recursos (por exemplo, descritos aqui). Mas o pior de tudo é que não houve uma grande atualização nos últimos três anos.

Então começamos a procurar algo para mover nossos projetos nodeJS. Tentamos o Koa.js (mas faltava muitas coisas), o Meteor.js (não precisamos realmente de uma solução completa, apenas a API), o Loopback (muita mágica) e muito mais.

Até que eu tropecei no AdonisJS. Para ser sincero, mesmo que o framework tenha 2.5k inicia no github, não foi fácil encontrá-lo. Mas eu imediatamente me apaixonei por isso. Vou tentar explicar o porquê.

Prós

1. Observando a estrutura de pastas e a lógica por trás, é quase idêntico a um framework PHP super popular - o Laravel. E o Laravel possui uma boa estrutura pensada, que permite manter as coisas claras. Então, se você já trabalhou com isso, aprenderá o Adonis rapidamente.

2. Seu ORM é feito com bancos de dados SQL em mente - como Postgres ou MySQL. Ele cria consultas SQL eficientes e é baseado na ideia de registro ativo. Seu construtor de consultas é fácil de aprender e nos permite criar consultas simples rapidamente. Por exemplo:

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

Porém, mesmo quando precisamos de coisas mais complicadas, como migrações, transações, junções, mandris ou consultas completamente "nativas da linguagem SQL" - tudo está lá e é fácil de usar. Quanto aos amantes do MongoDB - o adonis também o suporta.

3. Possui uma extensão de validação útil. Facilita a criação de regras, por exemplo:

regras const = {
  nome de usuário: 'obrigatório | exclusivo: usuários',
  email: 'obrigatório | email | exclusivo: usuários',
  senha: 'obrigatório | confirmado',
  grupo: 'existe em: grupo'
}
validação const = yield Validator.validate (userData, User.rules)
if (validation.fails ()) lança novos erros.Validação (validação)

Essas verificações podem ser síncronas ou assíncronas, podem acessar o banco de dados ou o que for necessário. E pode ser estendido com muita facilidade, por exemplo, fizemos uma verificação para provar se existe um registro em nosso banco de dados.

4. Apenas um bônus! Pessoalmente, eu amo como o Adonis usa e utiliza funções de gerador. Por exemplo:

// Modo clássico de espaguete
Users.all ((err, users) => {
  users.bicycles (). fetch ((err, bicycles) => {
    res.send ({usuários, bicicletas})
  })
})
// Promessa maneira
deixar usuários = nulo
Users.all ()
.then (fetchedUsers => {
  users = fetchedUsers
  retornar users.bicycles (). fetch ()
})
.then (bicicletas => {
  res.send ({usuários, bicicletas})
})
// Caminho do gerador (também conhecido como caminho do AdonisJS)
// O rendimento pausa a execução do código até que a função assíncrona seja concluída
const users = yield Users.all ()
const bicycles = rendimento users.bicycles (). fetch ()
res.send ({usuários, bicicletas})

Isso torna o código muito mais claro! Não há mais funções ou promessas fechadas, apenas código simples sem tabulação.

Contras

  1. Não há configuração de teste padrão. Escrever código sem testes - é uma maneira muito ingênua de desenvolver :-) Então tivemos que investir tempo na implementação de nossa própria configuração de teste em torno do Adonis. Upd: a instalação do teste oficial e o tutorial serão introduzidos no Adonis 4.0 a seguir
  2. Como não há muitos colaboradores e usuários, às vezes você ainda pode pegar um bug nas bibliotecas principais. Alguns deles são bastante óbvios :-)
  3. Embora os documentos sejam bons, a comunidade ainda é pequena. Não há muitas respostas no StackOverflow e não há muitos tutoriais (exceto o oficial)

Em vez de conclusão

Estamos usando o AdonisJS em produção nos últimos seis meses. É estável e rápido. Nós amamos isso!

Se você está procurando uma estrutura moderna do Node.js. com o ES6, o suporte ao Postgres e uma boa estrutura - confira Adonis.js

P. S. Meu projeto mais recente - https://pingdisco.com é 100% adonisjs, é uma ferramenta de monitoramento de tempo de atividade gratuita. Tente criar uma conta lá (apenas um campo é preenchido) e veja como é rápido e suave.

P. P. S. E se você precisar de ajuda ou tiver problemas com a estrutura, não hesite em me enviar uma mensagem sobre o Codementor. Também faço sessões de tutoriais onde posso mostrar o básico e alguns truques legais do Adonis.