В этом уроке мы познакомимся с обработчиками и выясним, как ими пользоваться.
Что такое обработчик
Главная содержательная часть в файле 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
Таким способом можно добавлять любое количество обработчиков на любые адреса.
Что такое диспетчеризация
Когда приложение получает запрос, как оно понимает, какой обработчик нужно запускать? Эту задачу решает диспетчеризация запроса, реализованная внутри фреймворка. Упрощенно этот процесс выглядит так:
- Фреймворк анализирует параметры запроса и пытается сопоставить два маршрута — добавленный в объект
app
и полученный в запросе. Другими словами, он сравнивает комбинацию метода запроса и сам адрес. Этот процесс называется роутингом или маршрутизацией - Если во время роутинга фреймворк нашел соответствующий маршрут, тогда вызывается его обработчик. Далее ответ от обработчика отправляется обратно клиенту
- Если фреймворк не нашел нужный обработчик, то запускается обработчик по умолчанию, который возвращает ошибку 404
Самостоятельная работа
- Выполните все шаги из этого урока на своем компьютере
- Запустите приложение и откройте в браузере страницу /users. Убедитесь, что на экране вывелся текст
Дополнительные материалы
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.