Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Маршруты и 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, первым делом сверьте адрес в маршруте и в ссылке буква в букву.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.