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}`)
})

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

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

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

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

Завершено

0 / 23