Exercício - Gravar dados

Concluído

A Tailwind Traders está impressionada com suas APIs, que devolvem produtos existentes. Agora você precisa criar uma API que possa inserir e atualizar produtos. Os dados são normalmente armazenados numa base de dados e contêm milhões de registos. 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 suporte para gravar dados

Implemente a API CRUD no products recurso:

Este projeto inicial em nodejs-route\exercise-express-routing\reading-writingcontém os arquivos do produto e algum código de aplicativo inicial. Tudo o que precisa de fazer é preencher as peças em falta.

  1. Clique com o botão direito do mouse no nome da pasta de leitura-gravação e selecione Abrir no terminal integrado.

  2. No terminal, execute o seguinte comando para instalá-lo:

    npm install
    
  3. Abra app.js para o inspecionar. O ficheiro deverá ter o seguinte aspeto:

     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. O próximo trabalho é implementar as rotas.

Implementar rota para ler dados

Para implementar rotas, o processo é adicionar um pequeno código e, em seguida, testá-lo. Continue adicionando o método de cada rota até ter uma API totalmente funcional. Faça as alterações no arquivo app.js no diretório de leitura-gravação . Todos os arquivos que começam com client são aplicativos cliente que você pode usar para testar sua API.

  1. 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);
    })
    
  2. Para verificar se o código funciona, inicie o aplicativo Node executando este comando:

    node app.js
    
  3. Em um terminal separado para a mesma pasta, leitura-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
    

    Deverá obter o seguinte resultado:

    Received data []
    Connection closed
    

    A API responde com uma matriz vazia, porque ainda não escreveu dados na mesma. Vamos mudar isso a seguir.

  4. No primeiro terminal, selecione Ctrl+C para parar o aplicativo.

Implementar rota para gravar dados

  1. 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 req.body entrada e constrói um objeto JavaScript a partir dele. Em seguida, ele é adicionado à products matriz de banco de dados na memória. Finalmente, o novo produto é devolvido ao utilizador.

  2. Para testar o código, execute o programa de servidor executando este comando:

    node app.js
    
  3. Em um terminal separado para a mesma pasta, leitura-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
    

    Deverá ver um resultado como este:

    response {"name":"product","id":1}
    Closed connection
    
  4. Para verificar se os dados são gravados na API, execute o seguinte comando:

    node client-get.js
    

    Deverá ver o seguinte resultado:

    Received data [{"name":"product","id":1}]
    Connection closed
    

    Os seus pedidos até agora:

    • client-post.js: A resposta informa que, quando você executou client-post.js, escreveu dados na API.
    • client-get.js: Você executou client-get.js para consultar a API para obter dados. A API respondeu com os dados que acabou de introduzir.
  5. No primeiro terminal, selecione Ctrl+C para parar o aplicativo.

Implementar rota para atualizar dados

  1. Para implementar a capacidade de atualizar os dados, localize o código com este aspeto:

    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 products matriz de banco de dados na memória que corresponde à id propriedade e atualiza esse registro.

  2. Para testar o código, inicie a aplicação do servidor:

    node app.js
    
  3. No outro terminal, execute este comando para criar um registro:

    node client-post.js
    
  4. Execute este comando para atualizar o registo recém-criado:

    node client-put.js
    

    Deverá ver a seguinte atualização no terminal:

    response {"name":"product-updated","id":1}
    Closed connection
    
  5. Para verificar se a atualização funciona, execute este comando:

    node client-get.js
    

    Deverá ver esta atualização:

    Received data [{"name":"product-updated","id":1}]
    Connection closed
    
  6. No primeiro terminal, selecione Ctrl+C para parar o aplicativo.

Implementar rota para excluir dados

  1. Para implementar a exclusão, localize o código com esta aparência:

    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 localiza o produto a ser excluído. Em seguida, ele filtra esse item da products matriz de banco de dados na memória e retorna o produto excluído.

  2. Para testar o código, inicie a aplicação do servidor:

    node app.js
    
  3. Num terminal separado, execute este comando para criar um registo:

    node client-post.js
    
  4. Execute este comando para remover o registo:

    node client-delete.js
    

    Deverá ver o seguinte resultado:

    response {"name":"product","id":1}
    Closed connection
    
  5. Para verificar o código, execute este comando:

    node client-get.js
    

    Deverá apresentar este resultado:

    Received data []
    Connection closed
    

    Parabéns! Você implementou um products recurso usando um CRUD completo (ações de criação, leitura, atualização, exclusão).

  6. No primeiro terminal, selecione Ctrl+C para parar o aplicativo.

Recipiente de desenvolvimento de limpeza

Depois de concluir o projeto, você pode querer limpar seu ambiente de desenvolvimento ou devolvê-lo ao seu estado típico.

Excluir o ambiente do GitHub Codespaces garante que você possa maximizar a quantidade de direitos de horas essenciais gratuitas que você obtém para sua conta.

Importante

Para obter mais informações sobre os direitos da sua conta do GitHub, consulte Codespaces do GitHub mensalmente incluídos armazenamento e horas principais.

  1. Entre no painel do GitHub Codespaces (https://github.com/codespaces).

  2. Localize seus Codespaces atualmente em execução provenientes do MicrosoftDocs/node-essentials repositório GitHub.

    Captura de tela de todos os Codespaces em execução, incluindo seu status e modelos.

  3. Abra o menu de contexto do espaço de código e selecione Excluir.

    Captura de tela do menu de contexto para um único espaço de código com a opção de exclusão realçada.