Этот пост является продолжением статьи.
Наша задача создать простое 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.
Самый свежий код здесь, этот репозиторий развиваться. Чтобы увидеть изменения которые я сделал нужно смотреть сюда.