Цей пост є продовженням.
Наше завдання створити просте api і тому зараз ми не будемо використовувати базу даних, натомість ми будемо зберігати дані в масив.
Щоб отримати доступ до даних, які прийшли в пост запит нам потрібно додати наступний код в app.js
app.use(express.json())
app.use(express.urlencoded())
Перший запис express.json() потрібний, якщо дані були надіслані у форматі JSON з використанням заголовка Content-Type: application/json
Друга строчка express.urlencoded() потрібна якщо дані були надіслані з використанням Content-Type: application/x-www-form-urlencoded
В обох випадках можете отримати доступ до даних, ось так req.body
Приклад отримання даних:
app.post('/', (req, res) => {
const param = req.body.param
const name= req.body.name
...
})
Напишемо api в стилі REST (Representational State Transfer – «передача репрезентативного стану»). REST-архітектура передбачає використання таких HTTP методів: GET, POST, PUT, DELET та інші. Але ми будемо використовувати лише ці чотири.
Тепер створимо папку з ім’ям routes у корені проекту. І до неї додамо файл todoRoutes.js
Тут буде код, що відповідає за відображення, додавання, зміну та видалення даних. Спочатку ми завантажуємо модуль express
'use strict'
const { Router } = require('express')
const router = Router()
Створимо масив для зберігання даних (імітуємо роботу з базою даних)
let todos = [
{
name: 'test',
done: false
}
]
Додаємо роут для відображення всіх записів з масиву
router.get('/', function(request, response, next) {
response.json(todos)
})
Добавляем роут для отображения записи по id
router.get('/:id', function(request, response, next) {
let id = request.params.id
let todo = todos[id]
if (!todo) {
return next(new Error('Todo was not found'))
}
response.json(todo)
})
Тепер роут для додавання запису
router.post('/', function(request, response, next) {
let todo = {
name: request.body.name,
done: false
}
todos.push(todo)
response.json(todo)
})
Тепер роут для оновлення запису з id
router.put('/:id', function(request, response, next) {
let id = request.params.id
let todo = todos[id]
if (!todo) {
return next(new Error('Todo was not found'))
}
todo.name = request.body.name
todo.done = request.body.done
response.json(todo)
})
І видалення запису по id
router.delete('/:id', function(request, response, next) {
let id = request.params.id
if (!todos[id]) {
return next(new Error('Todo was not found'))
}
todos.splice(id, 1)
response.json('Successfully removed')
})
І насамкінець нам потрібно визначити їх в об’єкті module.exports. Об’єкт module.exports це те, що повертає функція require()
module.exports = router
Тепер у нас є код для роботи з нашим списком завдань. Але це ще не все, тепер нам потрібно активувати наш todoRoutes.js Для цього нам потрібно додати трохи код в app.js
// Require API routes
var todoRoutes = require('./routes/todoRoutes')
// Import API Routes
app.use('/api/todo', todoRoutes)
Ми просто імпортуємо наші маршрути та вказуємо базову точку входу. Тепер всі наші роути будуть доступні за адресою url http://127.0.0.1:3000/api/todo
Для тестування api можна використовувати postma чи insomnia.
Найсвіжіший код тут, цей репозиторій розвиватиметься. Щоб побачити зміни, які я зробив, потрібно дивитися сюди.