Exercício: Gravar de dados
A Tailwind Traders está impressionada com suas APIs, que retornam produtos existentes. Agora você precisa criar uma API que possa inserir e atualizar produtos. Normalmente, os dados são armazenados em um banco de dados e contêm milhões de registros. Por esse motivo, você precisa usar técnicas que limitem a quantidade de dados que são passados para a API e retornados da API.
Implementar o suporte para gravação de dados
Implemente a API CRUD no recurso products
:
Este projeto inicial em nodejs-route\exercise-express-routing\reading-writing
contém os arquivos do produto e algum código de aplicativo inicial. Tudo o que você precisa fazer é preencher as partes que faltam.
Clique com o botão direito do mouse no nome da pasta Leitura-Gravação e selecione Abrir no terminal integrado.
No terminal, execute o seguinte comando para instalar a dependência:
npm install
Abra app.js para inspecioná-lo. O arquivo deve ser semelhante a este:
const express = require('express'); const app = express(); const port = 3000; app.use(express.json()); let products = []; app.post('/products', function (req, res) { // implement }); app.put('/products', function (req, res) { // implement }); app.delete('/products/:id', function (req, res) { // implement }); app.get('/products', (req, res) => { // implement }); app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`), );
O arquivo app.js mostra o esqueleto de um programa. Seu próximo trabalho é implementar as rotas.
Implementar rota para leitura de dados
Para implementar rotas, o processo consiste em adicionar um pouco de código e depois testá-lo. Continue adicionando o método de cada rota até que você tenha uma API totalmente funcional. Faça as alterações no arquivo app.js no diretório reading-writing. Todos os arquivos que começam com client
são aplicativos clientes que você pode usar para testar sua API.
Para dar suporte à leitura da API, localize a parte do código que tem esta aparência:
app.get('/products', (req, res) => { // implement })
Substitua-a por este código:
app.get('/products', (req, res) => { res.json(products); })
Para verificar se o código funciona, inicie o aplicativo Node executando este comando:
node app.js
Em um terminal separado para a mesma pasta, leitura e gravação, execute o seguinte comando. É importante ter dois terminais abertos porque você precisa executar o servidor e o cliente ao mesmo tempo.
node client-get.js
Você deverá obter o seguinte resultado:
Received data [] Connection closed
A API responde com uma matriz vazia porque você ainda não gravou nenhum dado nela. Vamos alterar isso em seguida.
No primeiro terminal, selecione Ctrl+C para interromper o aplicativo.
Implementar a rota para gravação de dados
Para implementar a gravação de dados no banco de dados na memória, localize este código:
app.post('/products', function (req, res) { // implement });
Substitua-a por este código:
app.post('/products', function(req, res) { const newProduct = { ...req.body, id: products.length + 1 } products = [ ...products, newProduct] res.json(newProduct); });
O novo código lê os dados de entrada de
req.body
e constrói um objeto JavaScript com base nele. Em seguida, ele será adicionado à matrizproducts
do banco de dados na memória. Por fim, o novo produto retornará ao usuário.Para testar o código, execute o programa do servidor usando este comando:
node app.js
Em um terminal separado para a mesma pasta, leitura e gravação, execute o seguinte comando. É importante ter dois terminais abertos porque você precisa executar o servidor e o cliente ao mesmo tempo.
node client-post.js
Você deverá ver uma saída como esta:
response {"name":"product","id":1} Closed connection
Para verificar se os dados foram gravados na API, execute o seguinte comando:
node client-get.js
Você deve ver o seguinte resultado:
Received data [{"name":"product","id":1}] Connection closed
Suas solicitações até o momento:
- client-post.js: a resposta informa que quando você executou client-post.js, você escreveu dados na API.
- client-get.js: você executou client-get.js para consultar dados na API. A API respondeu com os dados que você acabou de gravar nela.
No primeiro terminal, selecione Ctrl+C para interromper o aplicativo.
Implementar a rota para atualização de dados
Para implementar a capacidade de atualizar seus dados, localize o código parecido com este:
app.put('/products', function (req, res) { // implement });
Substitua-a por este código:
app.put('/products', function(req, res) { let updatedProduct; products = products.map(p => { if (p.id === req.body.id) { updatedProduct = { ...p, ...req.body }; return updatedProduct; } return p; }) res.json(updatedProduct); });
O novo código localiza o registro na matriz
products
do banco de dados na memória que corresponde à propriedadeid
e atualiza esse registro.Para testar o código, inicie o aplicativo para servidores:
node app.js
Em outro terminal, execute o comando abaixo para criar um registro:
node client-post.js
Execute este comando para atualizar o registro recém-criado:
node client-put.js
Você verá a seguinte atualização no terminal:
response {"name":"product-updated","id":1} Closed connection
Para verificar se a atualização funciona, execute este comando:
node client-get.js
Você verá esta atualização:
Received data [{"name":"product-updated","id":1}] Connection closed
No primeiro terminal, selecione Ctrl+C para interromper o aplicativo.
Implementar a rota para exclusão de dados
Para implementar a exclusão, localize o código semelhante a este:
app.delete('/products/:id', function (req, res) { // implement });
Substitua-a por este código:
app.delete('/products/:id', function(req, res) { const deletedProduct = products.find(p => p.id === +req.params.id); products = products.filter(p => p.id !== +req.params.id); res.json(deletedProduct); });
O novo código encontra o produto a ser excluído. Em seguida, ele filtra esse item da matriz
products
do banco de dados na memória e retorna o produto excluído.Para testar o código, inicie o aplicativo para servidores:
node app.js
Em um terminal separado, execute este comando para criar um registro:
node client-post.js
Execute este comando para remover o registro:
node client-delete.js
A seguinte saída deve ser exibida:
response {"name":"product","id":1} Closed connection
Para verificar o código, execute este comando:
node client-get.js
Ele fornecerá esta saída:
Received data [] Connection closed
Parabéns! Você implementou um recurso
products
usando um CRUD completo (ações de criação, leitura, atualização e exclusão).No primeiro terminal, selecione Ctrl+C para interromper o aplicativo.
Limpar o contêiner de desenvolvimento
Depois de concluir o projeto, limpe o ambiente de desenvolvimento ou devolva-o ao estado padrão.
Excluir o ambiente do GitHub Codespaces garante que você possa maximizar a quantidade de horas de núcleo gratuitas a que você tem direito na sua conta.
Importante
Para saber mais sobre os direitos da sua conta do GitHub, confira O GitHub Codespaces inclui mensalmente armazenamento e horas de núcleo.
Entre no painel do GitHub Codespaces (https://github.com/codespaces).
Localize seus Codespaces atualmente em execução, originados do repositório
MicrosoftDocs/node-essentials
do GitHub.Abra o menu de contexto do codespace e selecione Excluir.