Repositório do projeto criado durante o curso Node.js para Iniciantes do #NodeBR
- Link do curso: https://treinamento.nodebr.org/?origin=CursoErickWendel
- Link da documentação gerado pelo Swagger: https://cursonodebr-nodejsiniciantes.herokuapp.com/documentation
- Link do índice de cobertura de testes da API: https://cursonodebr-nodejsiniciantes.herokuapp.com/coverage/
Nessa aula foi o primeiro "Boom" que deu no meu cérebro... Vi instruturores em outros cursos utilizando ora o callback, ora a promise, mas em nenhum deles o instrutor aprofundo sobre o conceito de cada um deles (talvez para ganhar tempo...). Mas neste curso pude realmente entender o conceito de cada uma deles e até mesmo converter um callback em um promise, manual ou automaticamente
Nessa aula vimos sobre uma biblioteca do node que possuí um alta aplicabilidade. Pode ser utilizado, por exemplo, para geração de logs, para envio de notificações/alertas, para disparar outras funções, etc
Nesta aula vimos sobre manipulação de listas (vetores):
- for / for in / for of
- Array.map
- Array.filter
- Array.reduce
Uma introdução ao desenvolvimento orientado a testes com a biblioteca Mocha
Criamos uma ferramenta de linha de comando para simular um CRUD com banco de dados em arquivo .json
Criado padrão de projeto (design patterns) Strategy para trabalhando com multi bancos, no que segue:
-
Criamos a classe ICrud. Esta classe será responsável por "interfacear" as estratégias relacionadas com CRUD nos nossos bancos de dados (MongoDB e Postgres). Ou seja, ela disponibilizará métodos padrões para que, independente da estratégia adotada, todas as classes de manipulação de dados no banco sejam uniformes. Deste modo, ao utilizarmos o método B da estratégia A, se o mesmo não estiver implementado, levantará uma exceção, se o mesmo possuir uma implementação, deverá executar conforme esperado
-
Depois criamos as classes que representarão nossos schemas, que são a representação/configuração de um objeto em um banco de dados. Para o MongoDB utilizamos o Mongoose, e para o Postgres utilizamos o Sequelize. Essas classes extendem métodos da classe ICrud
-
Então criamos as classes que irão compor nossas estratégia para manipulação desses dados nos respectivos bancos, que envolve desde a conexão até procedimentos de manipulação dos dados, considerando um schema específico. Essas classes, que extendem métodos da classe ICrud, foram nomeadas MongoDB e Postgres. Elas recebem em seus constrututores dois parâmetros essencias: a conexão a ser utilizada (retornada por método estático da própria classe base) e o schema dos dados que serão utilizados
-
Em seguida criamos nossa classe que implementa o nosso contexto de conexão e manipulação dos dados, denominada ContextStrategy. Ela recebe em seu construtor o parâmetro que definirá o contexto que deverá ser trabalhado. Ou seja: conterá os dados da conexão que deverá ser utilizada e o schema de dados que serão manipulados
-
Por último criamos nossos contextos que deverão ser trabalhados e os disponibilizamos para nossas rotas
Vide exemplo:
const connMongo = await MongoDB.connect();
const contextMongo = new Context(new MongoDB(connMongo, HeroiSchema));
const connPG = await Postgres.connect();
const modelUsuario = await Postgres.defineModel(connPG, UsuarioSchema);
const contextPG = new Context(new Postgres(connPG, modelUsuario));
Conhecemos um pouco sobre o Sequelize e o Postgres, um banco de dados relacional
Conhecemos um pouco sobre o MongoDB, um banco de dados não relacional
Nesse módulo, aulas 13 a 18, criamos as rotas do Web Service que serão responsáveis pelo CRUD de heróis. para isto utilizamos a biblioteca Hapi.js
Este eu considero o segundo "Boom" que deu no meu cérebro... Ver toda a documentação da API ser gerada de forma tão rica e com tão pouco esforço foi demais!
Em projetos que trabalhei em outras oportunidades, tivemos de consumir um serviço privado que a empresa havia adquirido. Este serviço até continha alguma documentação, mas como não era o principal produto da mesma, a documentação era bastante precária. No final, após muitos e-mails e contatos telefônicos, consegui implementar a nossa solução que consumiria aquele serviço. Mas após olhar a riqueza de detalhes gerado pelo Swagger eu me lembrei instantaneamente deste episódio e, se estivesse documentado com esta biblioteca, meu trabalho teria sido muito mais simplificado
Este conteúdo é o que eu mais queria ver de todo o curso. Vi vídeos no youtube e também em artigos, mas a explicação que eu mais consegui abstrair informação foi a deste curso. Agora estou mais tranquilo para poder aprofundar ainda mais no tópico
Nesta aula aprendemos como implementar uma validação simples de autenticação e implementar o controle em todas as rotas, para então definir quais as rotas que não exigirão que exista um token válido no cabeçalho das solicitações (ex: login)
Implementação da estratégia de validação do conteúdo do token
Neste módulo vi sobre algumas práticas para publicação da serviços na Web. Utilizamos ferramentas que possuem um plano free, como o Heroku (para hospedar o serviço), o PM2 (para monitorar indicadores do servidor, além de implementar serviços de clusters, e outros). Também utilizamos a biblioteca Istanbul, que verifica o quão coberto de testes está nossa API, identificando deste modo pontos sensíveis da aplicação.
- Neste link você poderá conferir a documentação gerado pelo Swagger: https://cursonodebr-nodejsiniciantes.herokuapp.com/documentation
- Neste link você poderá conferir a cobertura de testes da API: https://cursonodebr-nodejsiniciantes.herokuapp.com/coverage/