Маршруты и HTTP-методы
Маршрут связывает адрес и HTTP-метод с функцией, которая формирует ответ. Такую функцию называют обработчиком. HTTP-метод — это вид запроса: GET читает данные, POST создаёт, PUT и PATCH изменяют, DELETE удаляет.
Простой маршрут
Маршруты пока пишем прямо в src/app.js, перед строкой export default app:
// src/app.js
app.get('/posts', (req, res) => {
res.send('Список статей');
});Откройте http://localhost:3000/posts — браузер покажет «Список статей». Обработчик получает два объекта: req — запрос, res — ответ.
Методы приложения
У каждого HTTP-метода есть метод с тем же именем в нижнем регистре. Один адрес может по-разному отвечать на разные методы:
// src/app.js
app.get('/posts', (req, res) => {
res.send('Список статей');
});
app.post('/posts', (req, res) => {
res.send('Статья создана');
});
app.put('/posts/1', (req, res) => {
res.send('Статья 1 заменена');
});
app.patch('/posts/1', (req, res) => {
res.send('Статья 1 изменена');
});
app.delete('/posts/1', (req, res) => {
res.send('Статья 1 удалена');
});Браузер при вводе адреса всегда отправляет GET. Остальные методы проверяют утилитой curl из терминала:
curl http://localhost:3000/posts
curl -X POST http://localhost:3000/posts
curl -X DELETE http://localhost:3000/posts/1В терминале появятся ответы «Список статей», «Статья создана» и «Статья 1 удалена».
Все методы сразу
app.all() срабатывает на любой метод. Его используют редко — например, чтобы ответить одинаково на всё по старому адресу:
// src/app.js
app.all('/old-blog', (req, res) => {
res.send('Блог переехал на /posts');
});Как попасть на маршрут со страницы
Ссылка в HTML всегда отправляет GET, а форма — GET или POST:
<a href="/posts">Все статьи</a>
<form method="post" action="/posts">
<button>Создать</button>
</form>Клик по ссылке вызовет маршрут app.get('/posts'), нажатие кнопки — app.post('/posts'). Методы PUT, PATCH и DELETE отправляют программы и скрипты, например fetch() в браузере.
Порядок маршрутов
Express проверяет маршруты в том порядке, в котором они добавлены, и вызывает первый подходящий. Если ни один не подошёл, клиент получит ответ 404 «Cannot GET /адрес».
Частая ошибка
Адреса сравниваются без учёта регистра и завершающей косой черты: /posts, /Posts и /posts/ попадут в один маршрут. А вот /post и /posts — разные адреса. Если страница отвечает 404, первым делом сверьте адрес в маршруте и в ссылке буква в букву.