Routes and Controllers
Router e Controllers fazem parte da arquitetura em camadas do back-end. Esse padrão de arquitetura possui algumas outras camadas, mas vamos falar como criar as duas primeiras camadas do back-end:
- Criando Routers
Quanto mais sua aplicação cresce, maior é a necessidade para uma organização. A primeira tarefa é definir as rotas que a sua aplicação vai ter e para isso você vai precisar de uma pasta chamada "routes" dentro da sua src
O exemplo acima possui duas pastas diferentes, uma para cada roteamento. Vamos olhar o roteamento dos usuários e ver como ele pode ser construído.
Na linha 1 importamos o Router diretamente do express. A Linha 2 é responsável por importar os middlewares, enquanto a linha 3 é responsável por importar os controllers e por fim a linha 5 importa os schemas de usuário.
Na linha 7 é criada uma variável que vai instânciar o Router do express para que o possamos utiliza-lo.
Assim, na linha 9 teremos nossa primeira rota. A rota "/sign-up"
é criada utilizando o método post do Router que foi instânciado acima dentro da variável userRouter
. Assim temos como primeiro parâmetro da função o exato endpoint, no caso, "/sign-up"
, o segundo parâmetro é uma middleware de validação (não se atentem a ela por enquanto) e o terceiro parâmetro é a função denominada createUser
que está na camada controller.
Por fim, exportamos userRouter
na linha 21.
- Alterando o app.js:
Antes de irmos a camada controller, vamos ver o que tem que ser modificado no arquivo onde antigamente ficavam as rotas e onde o express está instânciado:
Na linha 5 importamos o userRouter
que criamos anteriormente e usamos o método use e passamos o userRouter
como parâmetro.
- Criando Controllers:
Seguindo o padrão dos routers, aqui temos um controller para cada model
Vamos falar especificamente do userController, já que estavamos falando dele no router.
Na camada de controller, a função createUser
que chamamos no router é criada. Nela todas as regras de negócio, assim como o tratamento do body e das respostas é feito e enviado ao usuário.