Упражнение. Запись данных
Tailwind Traders впечатлен вашими API, которые возвращают существующие продукты. Теперь необходимо создать API, который может вставлять и обновлять продукты. Данные обычно хранятся в базе данных и содержат миллионы записей. По этой причине необходимо использовать методы, ограничивающие объем данных, передаваемых в API, и возвращаемых из API.
Реализация поддержки записи данных
Реализуйте API-интерфейс CRUD для ресурса products
:
Этот начальный проект nodejs-route\exercise-express-routing\reading-writing
содержит файлы продукта и некоторый начальный код приложения. Все, что вам нужно сделать, — заполнить отсутствующие части.
Щелкните правой кнопкой мыши имя папки чтения и записи и выберите "Открыть" в интегрированном терминале.
Для установки выполните следующую команду в терминале.
npm install
Откройте файл 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.
Чтобы обеспечить чтение из API, найдите часть кода, которая выглядит следующим образом:
app.get('/products', (req, res) => { // implement })
Замените его следующим кодом:
app.get('/products', (req, res) => { res.json(products); })
Чтобы проверка, что код работает, запустите приложение Node, выполнив следующую команду:
node app.js
В отдельном терминале для той же папки выполните следующую команду. Важно открыть два терминала, так как необходимо одновременно запускать сервер и клиент.
node client-get.js
Вы должны увидеть следующие выходные данные:
Received data [] Connection closed
API возвращает пустой массив, так как в него еще не записано никаких данных. Далее мы внесем изменения.
В первом терминале нажмите клавиши CTRL+C, чтобы остановить приложение.
Реализация маршрута для записи данных
Чтобы реализовать запись данных в базу данных в памяти, найдите следующий код:
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
массив базы данных в памяти. Наконец, новый продукт возвращается пользователю.Чтобы протестировать код, выполните серверную программу при помощи следующей команды.
node app.js
В отдельном терминале для той же папки выполните следующую команду. Важно открыть два терминала, так как необходимо одновременно запускать сервер и клиент.
node client-post.js
Вы должны увидеть такие выходные данные:
response {"name":"product","id":1} Closed connection
Чтобы убедиться, что данные записаны в 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-интерфейс ответил данными, которые вы только что записали в него.
В первом терминале нажмите клавиши CTRL+C, чтобы остановить приложение.
Реализация маршрута для обновления данных
Чтобы реализовать возможность обновления данных, найдите следующий код:
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
и обновляет запись.Чтобы протестировать код, запустите серверное приложение:
node app.js
В другом терминале выполните эту команду, чтобы создать запись.
node client-post.js
Выполните эту команду, чтобы обновить только что созданную запись:
node client-put.js
Вы должны увидеть следующий результат в терминале:
response {"name":"product-updated","id":1} Closed connection
Чтобы убедиться, что обновления работают, выполните следующую команду:
node client-get.js
Вы должны увидеть такое изменение:
Received data [{"name":"product-updated","id":1}] Connection closed
В первом терминале нажмите клавиши CTRL+C, чтобы остановить приложение.
Реализация маршрута для удаления данных
Для реализации удаления найдите код, который выглядит следующим образом:
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
массива базы данных в памяти и возвращает удаленный продукт.Чтобы протестировать код, запустите серверное приложение:
node app.js
В отдельном окне терминала выполните следующую команду, чтобы создать запись:
node client-post.js
Выполните эту команду, чтобы удалить запись:
node client-delete.js
Должен появиться следующий результат:
response {"name":"product","id":1} Closed connection
Чтобы проверить код, выполните следующую команду:
node client-get.js
Результат должен быть таким:
Received data [] Connection closed
Поздравляем! Вы реализовали ресурс с помощью полного
products
CRUD (создание, чтение, обновление, удаление действий).В первом терминале нажмите клавиши CTRL+C, чтобы остановить приложение.
Контейнер разработки очистки
После завершения проекта может потребоваться очистить среду разработки или вернуть ее в стандартное состояние.
Удаление среды GitHub Codespaces гарантирует, что вы можете максимально увеличить количество бесплатных основных часов, которые вы получаете для вашей учетной записи.
Внимание
Дополнительные сведения о правах учетной записи GitHub см . в GitHub Codespaces ежемесячно включено в хранилище и основные часы.
Войдите на панель мониторинга GitHub Codespaces (https://github.com/codespaces).
Найдите текущие запущенные пространства Codespaces, полученные из
MicrosoftDocs/node-essentials
репозитория GitHub.Откройте контекстное меню для пространства кода и нажмите кнопку "Удалить".