Esse projeto de estudo tem como objetivo a demonstração dos meus conhecimentos de Express e MongoDB Atlas. As próximas versões terão uma interface aprimorada para o usuário final.
Ao estudar documentações, compreendi que, embora não seja tecnicamente incorreto, o uso de classes em JavaScript não é considerado uma boa prática. É recomendável evitar o uso de classes e adotar a abordagem mais tradicional de protótipos para a definição de objetos.
Na versão Snowball, criei todas as contas utilizando o Path to Success. Na segunda versão, aprimorei o feedback para o usuário em caso de erros, incluindo tratamento de erros simples, como o retorno de um livro não encontrado.
No início do meu trabalho de tratamento de erros, eu percebi que poderia tratar erros de tipos que ocorrem em 2 modelos diferentes, reutilizando o código e, ao mesmo tempo, mantendo o código limpo e organizado.
No início dos meus testes com banco de dados, percebi que era possível registrar livros ou autores passando um JSON completamente vazio. A partir desse momento, comecei a trabalhar na validação de dados para garantir que apenas informações relevantes e válidas fossem registradas no banco de dados.
Ao pensar na experiência do usuário, comecei a considerar o padrão de visualização de produtos utilizado pelo mercado. Realizei estudos e iniciei o trabalho para tornar a experiência dos usuários da Livraria Oliveira mais familiar e agradável.
Após a instalação do projeto, conecte o mongoose a uma coleção do MongoDB Atlas.
npm install
Crie um arquivo .env no ./src crie uma variável MONGO_URL e passe uma string de conexão MongoDB Atlas, caso tenha alguma dúvida siga o vídeo abaixo.
npm run dev
Este script executa o nodemon
no arquivo server.js
que inicia toda a aplicação possibilitando o live server.
Após executar o script npm run dev
abra o Postman e teste as rotas abaixo!
index.js > bookRoute.js
bookRouter | URL | Descrição |
---|---|---|
GET | http://localhost:3000/books | { bookController.js > async listBooks() } Lista todos os livros da coleção, populando o campo Author. |
GET | http://localhost:3000/books/find?publisher=publisherName | { bookController.js > async findByPublisher() } Lista todos os livros da coleção que contém a editora indicado. |
POST | http://localhost:3000/books | { bookController.js > async registerBook() } Registra o livro passado no body utilizando a Model.books como base. |
PUT | http://localhost:3000/books/:id | { bookController.js > async updateBook() } Atualiza livro passado na URL como "/id", utilizando o body. |
DELETE | http://localhost:3000/books/:id | { bookController.js > async deleteBook() } Deleta o livro passado na URL como "/id". |
index.js > authorRoute.js
authorRouter | URL | Descrição |
---|---|---|
GET | http://localhost:3000/authors | { authorsController.js > async listAuthor() } Lista todos os autores da coleção. |
GET | http://localhost:3000/authors/:id | { authorsController.js > async listAuthorById() } Lista o author do "/id" passado na URL. |
POST | http://localhost:3000/authors | { authorsController.js > registerAuthor() } Registra o autor passado no body utilizando a Model.authors como base. |
PUT | http://localhost:3000/authors/:id | { authorsController.js > async updateAuthor() } Atualiza autor passado na URL como "/id", utilizando o body. |
DELETE | http://localhost:3000/books/:id | { authorsController.js > async deleteAuthor() } Deleta o autor passado na URL como "/id". |
Esse projeto foi desenvolvido com o objetivo de entender como utilizar o MongoDB e Express. A estrutura dos arquivos e códigos pode não estar perfeita, mas foi feito o melhor possível para que tudo funcione. Caso você tenha alguma sugestão, fique a vontade para abrir uma issue no repositório ou entre em contato através do meu LinkedIn
: https://www.linkedin.com/in/victor23hd/
- Node.js
- API Rest
- Middleware de erros
- Express fremework
- MongoDB Atlas / Mongoose
- Postman