Yeoman: criando API Node.js com TypeScript e JWT e MongoDB


Yeoman: criando API Node.js com TypeScript e JWT e MongoDB

Recentemente eu precisei criar algumas API’s para empresa onde trabalho e como estamos adotando as tecnologias Node.js com TypeScript acabamos perdendo algum tempo para configurar a nossa estrutura toda vez que iniciamos um novo projeto.

Bom, pensando em otimizar esse passo eu criei um pacote e subi no portal NPM para que com apenas alguns passos tenhamos uma API configurada com Node.js, TypeScript, MongoDB e o JWT para autenticação.

Caso você queira ver a versão final do código que eu utilizei para criar esse pacote, segue o seu link no GitHub.

Para esse artigo, nós iremos baixar esse pacote via gerenciador de pacotes do Node.js o NPM e navegar pela estrutura que iremos gerar a partir do pacote ts-api.

Baixando os pacotes

Nosso primeiro passo será baixarmos os seguintes pacotes:

npm install -g yo
npm install -g generator-ts-api

Em seguida devemos executar o comando yo ts-api, para que possamos criar o nosso projeto. O comando ts-api é o nome do pacote que nós baixamos a cima. Podemos ver o resultado da execução desse comando na imagem abaixo:

Preencha o prompt com o nome que deseja para o seu projeto. Esse passo ira demorar um pouco para finalizar, pois ele além de criar toda estrutura do nosso projeto, irá baixar os pacotes necessário para a nossa aplicação que estão configurados nas dependências do nosso arquivo package.json.

Estrutura do projeto

Para os nossos próximos passos, iremos precisar de uma IDE, para esse artigo eu irei utilizar o Visual Studio Code (VS Code), mas você pode utilizar um de sua preferência.

Com o projeto aberto na sua IDE, vamos navegar pela sua estrutura de pastas e entender quais arquivos foram criados, mas antes execute o comando npm run copile, ele irá fazer o transpiler do TypeScript, após esse passo teremos a seguinte estrutura:

Estrutura do projeto

Vamos entender ela navegando por seus diretório começando pelo dist:

  • dist: diretório que nós configuramos no arquivo tsconfig para gerar os nossos arquivos .js.
  • controllers: pensando em uma aplicação MVC, seria o local onde configuramos as nossas rotas, nesse primeiro momento nós deixamos como default a UserController.
  • models: ainda pensando no conceito MVC, aqui seria o local das nossas Models. Para a nossa estrutura estamos utilizando ela para criar os Schemas do MongoDD.
  • repositories: em uma V2 irei implementar o Repositório Pattern que nem utilizamos no .NET, mas para essa versão está só mapeando Schema com o MongoDB.
  • routes: para que as nossas controllers não fiquem muito grande, nós criamos colocamos as nossas regras dentro de routes, lá nós recebemos as requisições tratamos e retornamos para a nossa Controller.
  • app: esse é o arquivo de configuração do nosso projeto, aqui nós importamos os todos os nossos pacotes/modulos, configuramos as nossas rotas/middlers e como iremos trabalhar, se iremos utilzar Auth ou não. Nesse arquivo nós damos o start no nosso DB e configuramos ele também.
  • server: Primeiro arquivo que é chamado na nossa aplicação, nele nós configuramos a porta que iremos utilizar e verificamos se o nosso banco de dados está configurado corretamente ou se aconteceu algum crash na nossa APP.
  • tsconfig: para essa V1 estamos utilizando o ES5, mas para v2 iremos criar uma fluxo para que o usuário escolha a versão que deseja para o ECMAScript.

Config: dentro desse diretório nós temos 3 arquivos: auth.ts, configs.ts, db.ts.

  • auth: arquivo de configuração do JWT, nesse nós verificamos o header da request e validamos se está com o token, caso sim validamos ele.
  • configs: arquivo de configuração para variáveis de ambiente, nesse primeiro momento estamos utilizando para a secret do JWT.
  • db: arquivo de configuração do nosso banco de dados, nele nós temos a nossa string de conexão, e as configurações e validações necessários para trabalharmos com o MongoDB.

Testando o projeto

Para que possamos testar o nosso projeto, basta executar o comando npm start, ele irá abrir o nosso projeto na porta 3040. Podemos ver na imagem abaixo o log que ele nos gerou:

 
Executando o projeto

Notem que ele está nos avisando que o mongo está desconectado, ele deu essa mensagem porque eu estou utilizando o mongo com o Docker e nesse momento ele está parado.

Testando as Rotas

O projeto já vem com o cors habilitado, caso você acesse o endereço http://localhost:3040/ pode observar que ele entrou na nossa default, essa rota está liberada. Agora para que possamos testar o JWT, tente acessar a rota /api/v1/users. Podemos ver o retorno 403 que recebemos nessa requisição na imagem abaixo:

 
Validando a Rota

Nós recebemos esse retorno porque configuramos para que essa rota precise de um token para ser acessada. Podemos ver esse trecho de código abaixo:

Notem que estamos adicionando o middler de validate na linha 07.

Testando DB

Para testar o banco de dados basta você configurar a sua string de conexão no arquivo config/db.ts, caso tudo OK ele irá retornar o status de conectado conforme podemos ver na imagem abaixo:

 
MondoDB connected

Bom, com isso nós passamos por toda estrutura gerado pelo pacote ts-api, espero que esse projeto possa ajudar.

Compartilhe:

Share on facebook
Facebook
Share on twitter
Twitter
Share on pinterest
Pinterest
Share on linkedin
LinkedIn

Table of Contents

Postagens Relacionadas

SaferatHome

Safer at Home

Safer at Home 26/02/2021(US) – Filmes – 0h 0min –   Nota: 0/10   Sinopse     Elenco Mais informações Título Original Safer at Home
SouLunaOUltimoShow

Sou Luna: O Último Show

O elenco de “Sou Luna” se apresenta ao vivo pela última vez no mítico estádio Luna Park em Buenos Aires. Vamos acompanhá-los na intimidade dos bastidores e r…
Chansondouce

Chanson douce

Chanson douce () – Drama, Crime – 1h 40min –   Nota: 6/10   Sinopse     Elenco Leïla Bekhti Como – Myriam Karin Viard
OutpostInfernoNegro

Outpost 2: Inferno Negro

O ano é 1945, 2ª Guerra Mundial, e um cientista alemão de nome Klausener está trabalhando em uma tecnologia nova e assustadora que tem o poder de criar um ex…