Зарегистрируйтесь, чтобы продолжить обучение

Обработчики запросов JS: Веб-разработка

В этом уроке мы познакомимся с обработчиками и выясним, как ими пользоваться.

Что такое обработчик

Главная содержательная часть в файле index.js — обработчик запроса:

app.get('/', (req, res) => {
  res.send('Hello World!')
})

На каждый адрес задается обработчик — это функция, которая подготавливает ответ по заданному адресу и возвращает его. Затем веб-сервер превращает этот ответ в HTTP-ответ и отправляет клиенту. В примере выше, обработчик отдает строку Hello World на запрос GET /.

В Fastify все приложение представлено объектом типа Fastify. Этот объект содержит методы, аналогичные методам HTTP:

  • get
  • post
  • put и так далее

Эти методы принимают на вход два параметра:

  • Маршрут, для которого он вызовется
  • Сам обработчик

В простейшем случае обработчик — это функция, которой на вход приходит два объекта:

  • req (request) — это объект запроса, который содержит всю информацию о запросе, отправленном клиентом. Он содержит различные свойства и методы, которые позволяют получить доступ к различным данным запроса
  • res (response) – это объект ответа, он представляет собой ответ, который будет отправлен клиенту. Он также содержит различные свойства и методы для управления ответом

В нашем примере мы установили тело ответа через метод res.send(). Остальные параметры были установлены фреймворком по умолчанию, например, код ответа 200.

Во фреймворках принято считать, что маршрут — это комбинация метода HTTP и адреса. Другими словами, с точки зрения большинства фреймворков GET /users и POST /users — это разные маршруты со своими обработчиками.

Посмотрим, как это работает на практике. Определим соответствующие маршруты и выполним запросы к ним с помощью curl:

import fastify from 'fastify'

const app = fastify()
const port = 3000

app.get('/users', (req, res) => {
  res.send('GET /users')
})

app.post('/users', (req, res) => {
  res.send('POST /users')
})

app.listen({ port }, () => {
  console.log(`Example app listening on port ${port}`)
})
# После старта приложения
curl localhost:3000/users

GET /users

curl -XPOST localhost:3000/users

POST /users

Таким способом можно добавлять любое количество обработчиков на любые адреса.

Что такое диспетчеризация

Когда приложение получает запрос, как оно понимает, какой обработчик нужно запускать? Эту задачу решает диспетчеризация запроса, реализованная внутри фреймворка. Упрощенно этот процесс выглядит так:

  1. Фреймворк анализирует параметры запроса и пытается сопоставить два маршрута — добавленный в объект app и полученный в запросе. Другими словами, он сравнивает комбинацию метода запроса и сам адрес. Этот процесс называется роутингом или маршрутизацией
  2. Если во время роутинга фреймворк нашел соответствующий маршрут, тогда вызывается его обработчик. Далее ответ от обработчика отправляется обратно клиенту
  3. Если фреймворк не нашел нужный обработчик, то запускается обработчик по умолчанию, который возвращает ошибку 404

Самостоятельная работа

  1. Выполните все шаги из этого урока на своем компьютере
  2. Запустите приложение и откройте в браузере страницу /users. Убедитесь, что на экране вывелся текст

Дополнительные материалы

  1. Front Controller

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff