Упражнение. Запись данных

Завершено

Tailwind Traders впечатлен вашими API, которые возвращают существующие продукты. Теперь необходимо создать API, который может вставлять и обновлять продукты. Данные обычно хранятся в базе данных и содержат миллионы записей. По этой причине необходимо использовать методы, ограничивающие объем данных, передаваемых в API, и возвращаемых из API.

Реализация поддержки записи данных

Реализуйте API-интерфейс CRUD для ресурса products:

Этот начальный проект nodejs-route\exercise-express-routing\reading-writingсодержит файлы продукта и некоторый начальный код приложения. Все, что вам нужно сделать, — заполнить отсутствующие части.

  1. Щелкните правой кнопкой мыши имя папки чтения и записи и выберите "Открыть" в интегрированном терминале.

  2. Для установки выполните следующую команду в терминале.

    npm install
    
  3. Откройте файл app.js, чтобы проверить его. Файл должен выглядеть так:

     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}`),
     );
    

    В файле app.js показан скелет программы. Ваша следующая задача — реализовать маршруты.

Реализация маршрута для чтения данных

Чтобы реализовать маршруты, процесс — добавить небольшой код, а затем протестировать его. Продолжайте добавлять метод каждого маршрута, пока не будет иметь полнофункциональный API. Внесите изменения в файл app.js в каталоге чтения и записи . Все файлы, начинающиеся с client , являются клиентскими приложениями, которые можно использовать для тестирования API.

  1. Чтобы обеспечить чтение из API, найдите часть кода, которая выглядит следующим образом:

    app.get('/products', (req, res) => {
      // implement
    })
    

    Замените его следующим кодом:

    app.get('/products', (req, res) => {
      res.json(products);
    })
    
  2. Чтобы проверка, что код работает, запустите приложение Node, выполнив следующую команду:

    node app.js
    
  3. В отдельном терминале для той же папки выполните следующую команду. Важно открыть два терминала, так как необходимо одновременно запускать сервер и клиент.

    node client-get.js
    

    Вы должны увидеть следующие выходные данные:

    Received data []
    Connection closed
    

    API возвращает пустой массив, так как в него еще не записано никаких данных. Далее мы внесем изменения.

  4. В первом терминале нажмите клавиши CTRL+C, чтобы остановить приложение.

Реализация маршрута для записи данных

  1. Чтобы реализовать запись данных в базу данных в памяти, найдите следующий код:

    app.post('/products', function (req, res) {
       // implement
    });
    

    Замените его следующим кодом:

    app.post('/products', function(req, res) {
      const newProduct = { ...req.body, id: products.length + 1 }
      products = [ ...products, newProduct]
      res.json(newProduct);
    });
    

    Новый код считывает входящие данные из req.body, а затем из них формируется объект JavaScript. Затем он добавляется в products массив базы данных в памяти. Наконец, новый продукт возвращается пользователю.

  2. Чтобы протестировать код, выполните серверную программу при помощи следующей команды.

    node app.js
    
  3. В отдельном терминале для той же папки выполните следующую команду. Важно открыть два терминала, так как необходимо одновременно запускать сервер и клиент.

    node client-post.js
    

    Вы должны увидеть такие выходные данные:

    response {"name":"product","id":1}
    Closed connection
    
  4. Чтобы убедиться, что данные записаны в API, выполните следующую команду.

    node client-get.js
    

    Должен появиться следующий результат:

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

    Ваши запросы до сих пор:

    • client-post.js. Ответ сообщает вам, что при запуске client-post.js вы написали данные в API.
    • client-get.js. Вы выполнили client-get.js для запроса API для данных. API-интерфейс ответил данными, которые вы только что записали в него.
  5. В первом терминале нажмите клавиши CTRL+C, чтобы остановить приложение.

Реализация маршрута для обновления данных

  1. Чтобы реализовать возможность обновления данных, найдите следующий код:

    app.put('/products', function (req, res) {
      // implement
    });
    

    Замените его следующим кодом:

    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);
    });
    

    Новый код находит запись в массиве products базы данных в памяти, который соответствует свойству id и обновляет запись.

  2. Чтобы протестировать код, запустите серверное приложение:

    node app.js
    
  3. В другом терминале выполните эту команду, чтобы создать запись.

    node client-post.js
    
  4. Выполните эту команду, чтобы обновить только что созданную запись:

    node client-put.js
    

    Вы должны увидеть следующий результат в терминале:

    response {"name":"product-updated","id":1}
    Closed connection
    
  5. Чтобы убедиться, что обновления работают, выполните следующую команду:

    node client-get.js
    

    Вы должны увидеть такое изменение:

    Received data [{"name":"product-updated","id":1}]
    Connection closed
    
  6. В первом терминале нажмите клавиши CTRL+C, чтобы остановить приложение.

Реализация маршрута для удаления данных

  1. Для реализации удаления найдите код, который выглядит следующим образом:

    app.delete('/products/:id', function (req, res) {
      // implement
    });
    

    Замените его следующим кодом:

    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);
    });
    

    Новый код находит продукт для удаления. Затем он фильтрует этот элемент из products массива базы данных в памяти и возвращает удаленный продукт.

  2. Чтобы протестировать код, запустите серверное приложение:

    node app.js
    
  3. В отдельном окне терминала выполните следующую команду, чтобы создать запись:

    node client-post.js
    
  4. Выполните эту команду, чтобы удалить запись:

    node client-delete.js
    

    Должен появиться следующий результат:

    response {"name":"product","id":1}
    Closed connection
    
  5. Чтобы проверить код, выполните следующую команду:

    node client-get.js
    

    Результат должен быть таким:

    Received data []
    Connection closed
    

    Поздравляем! Вы реализовали ресурс с помощью полного products CRUD (создание, чтение, обновление, удаление действий).

  6. В первом терминале нажмите клавиши CTRL+C, чтобы остановить приложение.

Контейнер разработки очистки

После завершения проекта может потребоваться очистить среду разработки или вернуть ее в стандартное состояние.

Удаление среды GitHub Codespaces гарантирует, что вы можете максимально увеличить количество бесплатных основных часов, которые вы получаете для вашей учетной записи.

Внимание

Дополнительные сведения о правах учетной записи GitHub см . в GitHub Codespaces ежемесячно включено в хранилище и основные часы.

  1. Войдите на панель мониторинга GitHub Codespaces (https://github.com/codespaces).

  2. Найдите текущие запущенные пространства Codespaces, полученные из MicrosoftDocs/node-essentials репозитория GitHub.

    Снимок экрана: все запущенные пространства Codespace, включая их состояние и шаблоны.

  3. Откройте контекстное меню для пространства кода и нажмите кнопку "Удалить".

    Снимок экрана: контекстное меню для одного пространства кода с выделенным параметром удаления.