Vale ressaltar que o objetivo deste projeto é estudos e teste de bibliotecas e ferramentas. Hoje eu prefiro utilizar um framework "pronto" utilizo o NestJs
Será usado o Express como biblioteca HTTP, pois quero fazer um projeto mais simples e ir integrando outros serviços como: mensageria, websockets, crons e o que mais eu achar interessante =D
O projeto vai utilizar typescript e vou seguir o exemplo de uso da propria documentação.
Também vou utilizar o docker para poder subir o projeto sem necessidade de instalar o node localmente.
Todos os serviços que for utilizar pretendo deixar dockerizado para não ter dor de cabeça na instalação.
Próximos passos
- Configurar o typescript
- Configurar a lib para testes
- Configurar carregamento de variaveis de ambiente
- Configurar o docker
- Configurar o conexão como banco de dados (pretendo utilizar o mongodb e postgres futuramente)
- Criar um crud simples
- Criar estrutura para usar mensageria (pretendo utilizar o rabbitMQ)
- A ideia é enfileirar um geração de um arquivo.
- OBS1
- OBS2
- Configurar documentação de API
Para rodar o projeto localmente
- Está sendo utilizado o node 20.x
- Logo o padrão é
npm install - Depois para rodar em desenvolvimento
npm run dev
Docker
- Precisa ter o docker instalado e sendo executado
- Para rodar como produção
docker build -t express-boilerplate .docker run -dp 127.0.0.1:3000:3000 express-boilerplate- Para rodar em desenvolvimento ...
OBS1
- Não ficou exatamente como eu gostaria mas deu para ver o funcionamento da lib e comparar com outro serviço de mensageria.
- Outro ponto que mudaria do exemplo apresentado no site do rabbitMQ seria usar o banco para salvar as mensagens offlines.
- O processo de uso de mensageria é relativamente simples de usar processar.
OBS2
- Foi feita uma mudança para usar como um classe.
- Uma pendência é criar como um serviço e compartilhar para os controllers a instância preferi fazer como singleton para facilitar.
- Outra coisa que gostaria de fazer mas que da para utilizar é adicionar várias filas ao serviço.
- Pensei em fazer algo semelhando ao que foi feito no arquivo app.ts na parte de controllers.