Iniciando no AdonisJS — parte 2

André Luiz Batista Aureliano
6 min readOct 1, 2020

--

Continuação da Parte 1

Adonis foi um bonito jovem grego. Talvez por isso deram o nome ao framework.

No primeiro artigo falamos sobre como iniciar e configurar tão rápido quanto um piscar de olhos o Adonis. Vimos sobre as Views, e ficamos de falar sobre os Controllers e os Models. Também vimos as Rotas, que será como chamaremos os recursos.

Objetivo

Vamos fazer um cadastro de Filmes. Agora que passamos dos primeiros passos, vamos setar um objetivo pra nossa aplicação. Estamos em 2020 e o mais interessante ao se fazer aplicações web é usar algum framework front-end, algo como React, Vue, Angular, qualquer um.

O Framework escolhido irá consumir e enviar dados para uma API através de seus endpoints(as rotas).

Pera lá um pouquinho, esse artigo é sobre Adonis, não sobre frameworks front-end! Eu sei, por isso vamos usar um programa pra testar as requisições que o framework faria e não precisar construir um app front-end.

Insomnia

O Insomnia é um programa muito bom pra você criar rapidamente as requisições pra sua API e testá-las.

Isso é tudo que você precisa saber sobre o Insomnia até o momento, mais tarde voltamos pra ver como criar as requisições.

Vamos modelar nosso banco? Jogo rápido com o recurso de Migration!

Migrations

É através dos migrations que você vai criar, alterar ou excluir as tabelas e campos no seu banco de dados.

O Adonis utiliza o Knex.js para gerenciar essa camada entre o banco de dados e a aplicação.

Os migrations ficam nessa pasta:

O Adonis já cria por padrão esses dois migrations, que são referentes a tabela de usuários e tokens, responsáveis pela autenticação. Mais na frente veremos sobre isso.

Vamos criar a tabela de Filmes(Movies), então executaremos esse comando:

adonis make:migration movies

É uma convenção que as tabelas tenham seus nomes no plural.

Esse comando irá perguntar se esse migration será para alterar uma tabela já existente ou criar uma nova. No nosso caso, será criar uma nova:

Agora temos o nosso novo arquivo de movies:

que terá a seguinte estrutura:

e vamos acrescentar os campos que queremos:

A lista de todos os tipos de campo você pode ver na documentação do Knex.js

Ok, agora é só rodar o migration e sua tabela terá sido criada:

adonis migration:run

e…

HOLLY FUCK!!!!!!

Eita porra! Perainda rapaz! Falta a gente instalar o conector mysql do node:

npm install mysql --save

Depois de instalar e agora executar o migration, verá o seguinte:

SUCESSO!

MODEL

Para trabalhar com a tabela vamos criar um Model, que é a camada intermediaria entre o controller e o banco de dados.

adonis make:model movie

Isso irá criar um arquivo na pasta:

Com a seguinte estrutura padrão:

Nesse arquivo que iremos colocar algumas funções que mapeiam o relacionamento do banco de dados.

Como exemplo, se tivéssemos uma tabela de atores que participam de um filme. E também uma tabela de Produtoras. Poderíamos ter as seguintes funções:

Um Filme possui muitos Atores.
Um Filme pertence somente a uma Produtora.

Controller

Agora a camada de Controller, a qual gerenciaremos as requisições do usuário e mandaremos para o Model tratar e devolver uma resposta através de uma View.

adonis make:controller movies

O Adonis permite criar controllers tanto para requisições http(nosso caso), quanto para um WebSocket.

PS: Perceba que mesmo colocando movies no plural, ele criou o controller no singular. Essa é a vantagem de nomear tudo em inglês, o adonis entende e faz a conversão de plural pra singular automaticamente, e vice-versa.

Esse é o nosso controller, ainda virgem.

Vamos criar uma função pra retornar todos os filmes chamada index():

Top! Explicando…

La em cima(linha 3) a gente instancia o Model de Movie pra não precisar ficar repetindo.

A função index(linha 6), assim como todas do controller do adonis, tem que ser async. Isso porque as requisições ao banco de dados são assíncronas e isso é par que a gente possa colocar um await e esperar a resposta.

O { response } é uma das propriedades de desestruturação do objeto que o Adonis manda em toda chamada de um método do controller. O Response é o que usamos pra devolver uma resposta, manipular o status dessa resposta e seu formato.

Vamos puxar todos os registros daquela tabela com o método all() na linha 8.

const movies = await Movie.all()

O await é para que a execução espere o resultado dessa consulta.

O .all() é uma das funções do Lucid, que é o ORM do Adonis. Nesse caso ele retorna tudo! O Lucid possui diversas outras funções que ajudam demais. Confira aqui.

Certo, mas e agora, como testamos isso?

Voltamos pra o Insomnia e criamos uma request:

New Request.
Vamos dar um nome e escolher o método GET ao lado.
Preenchemos com o endereço da rota.
OPAAAA!

Não criamos a rota ainda! Volta pra o routes.js

Perceba uma diferença. Agora colocamos entre aspas o nome do Controller e o método que será executado lá dentro.

Feito! Salvo! Testa de novo…

E olha só, como essa é uma rota GET, ela também executa direto pelo navegador:

É isso aí, voltamos na próxima, falando sobre como inserir, editar e excluir dados…

Segue a parte 3 aqui.

--

--

André Luiz Batista Aureliano

Tech Lead Engineer @ InHire . Entrepeneur, Web/App Software Developer. “Hitting the head on the keyboard, until something goods happens”