Nós aprendemos a como criar um servidor usando ExpressJS e como fazer as opeações de CRUD em um banco de dados no MongoDB com Mongoose. Essa atividade vai te ajudar a entender o quanto você fixou esses conceitos e como aplicá-los.
Esse desafio requer que você crie uma aplicação básica contendo dois models e rotas com Express.
Você irá trabalhar nos seguintes arquivos:
models/album.model.jsmodels/purchase.model.jsroutes/albums.router.jsroutes/purchase.router.js
O arquivo app.js contém as configurações iniciais do servidor e da conexão do banco de dados com mongoose.
Para iniciar, siga as instruções:
- Fork no repositório
- Clone o repositório
Em seguida:
-
Instale as dependências:
npm install -
Crie um arquivo
.envseguindo o exemplo do arquivo.example.env:
PORT=8080 <-- padrão
MONGODB_URI=mongodb://127.0.0.1:27017/LAB-CRUD-express-mongoose
-
Para iniciar o servidor, utilize
npm run devpara rodar com nodemon, ou tente a nova feature do nodenode --watch index.js -
Caso queira testar suas rotas, utilize o Postman ou o Insomnia
Importante!: Lembre-se de exportar cada
modelapós criá-lo.
O modelo do Album deve conter as seguintes propriedades:
performer- Stringtitle- Stringcost- Number
O modelo Purchase deve conter as seguintes propriedades:
shippingAdress- Stringalbum- ObjectID referente ao modelo do Album
Importante: Antes de começar, leia atentamente as instruções.
Requests
Você sempre pode adicionar um console.log(req.body) ou console.log(req.params para checar o conteúdo do corpo da requisição ou dos parâmetros de rota. Lembre-se de checar o terminal.
Response
Todas as suas rotas devem retornar uma response em JSON. Isso significa que você deve utilizar res.json().
Por exemplo:
const data = await Model.find()
return res.status(200).json(data)
Essa rota irá receber requests contendo um objeto com as informações do album: performer, title, cost.
Você pode acessar esses valores pelo req.body.
A rota deve:
- Criar um novo album com os valores recebidos no
req.body, utilizando o modelAlbum. - Deve retornar uma response em
JSONcontendo o documento criado.
A rota GET /albums deve:
- Retornar todos os albums do banco de dados.
- Retornar uma response em
JSONcontendo todos os documentos de albums.
A rota recebe a id do album pelo parâmetro de rota albumId.
Você pode acessar esse valor com req.params.
A rota deve:
- Retornar um único documento pelo seu id, utilizando o model
Album. - Deve retornar uma response em
JSONincluindo o objeto do album.
A rota recebe o id do album a ser atualizado como o parâmetro de rota albumId.
O req.body irá conter as seguintes informações do album: performer, title e cost.
A rota deve:
- Encontrar um album existente pelo seu id e atualizar os campos
performer,titleecost. - Retornar uma response em
JSONincluindo o documento atualizado do album.
Essa rota recebe o id do album a ser deletado como o parâmetro de rota albumId.
A rota deve:
- Deletar um album existente pelo seu id, utilizando o model
Album. - Retornar uma response em
JSONincluindo apenas o status HTTP de204.
Essa rota irá receber requests contendo o objeto com as informações da purchase:
shippingAddress- StringalbumId- ObjectId.
Você pode acessar esses valores através do req.body.
A rota deve:
- Criar um novo documento purchase com os valores recebidos em
req.body, utilizando o modelPurchase. - A propriedade
albumIddeve guardar apenas a referencia do_iddo objeto do album. - Retornar uma response em
JSONcom o conteúdo da purchase criada.
Essa rota recebe o id da purchase como parâmetro de rota purchaseId.
A rota deve:
- Retornar uma purchase encontrada pelo id, utilizando o model
Purchase. - Popular a propriedade
albumpara receber os detalhes do album. - Retornar uma response em
JSONincluindo o objeto populado da purchase.
Dica: A Propriedade album do objeto é apenas uma referência (id). Você deverá .populate() esse campo para conseguir os detalhes do album dentro da purchase.
Bons códigos!
Ironhack Sao Paulo.