В библиотеке Iron объект options используется как
централизованное описание поведения маршрута, обработчика или сервиса.
Он формирует конфигурационный слой, через который задаются правила
обработки запроса, трансформации данных, ограничения доступа и
дополнительные механизмы управления жизненным циклом запроса.
Основная идея объекта заключается в том, что логика приложения отделяется от конфигурации. Это позволяет переиспользовать обработчики и изменять поведение системы без переписывания бизнес-логики.
Структура объекта обычно имеет следующий вид:
const options = {
method: 'GET',
path: '/users',
handler: (request, h) => {},
validate: {},
auth: false
};
Каждое поле выполняет строго определённую роль, а отсутствие части параметров приводит к использованию значений по умолчанию, заданных внутри Iron.
Поле method определяет HTTP-метод, для которого
активируется обработчик.
Допустимые значения:
Пример:
const options = {
method: 'POST',
path: '/create-user',
handler: createUserHandler
};
При отсутствии поля маршрут может становиться универсальным или наследовать поведение от уровня приложения, если библиотека поддерживает такие механизмы.
path задаёт маршрут, по которому будет вызываться
обработчик.
Особенности:
Пример:
const options = {
method: 'GET',
path: '/users/{id}',
handler: getUserById
};
Параметры в фигурных скобках автоматически извлекаются и передаются в объект запроса.
handler является центральной функцией обработки запроса.
Она получает объект запроса и объект ответа (или утилитарный объект h,
если используется паттерн helper).
Пример:
const options = {
method: 'GET',
path: '/status',
handler: (request, h) => {
return { status: 'ok' };
}
};
Handler может быть:
validate используется для проверки входящих данных. Оно
может включать валидацию параметров пути, query-параметров, тела запроса
и заголовков.
Типичная структура:
const options = {
method: 'POST',
path: '/users',
handler: createUser,
validate: {
payload: userSchema,
query: querySchema,
params: paramsSchema
}
};
Основные области применения:
Поле auth управляет доступом к маршруту.
Возможные значения:
false — авторизация отключенаПример:
const options = {
method: 'GET',
path: '/profile',
handler: profileHandler,
auth: 'jwt'
};
Расширенный вариант:
auth: {
strategy: 'jwt',
scope: ['admin', 'user']
}
payload управляет обработкой тела запроса.
Основные параметры:
parse — включение или отключение парсингаoutput — формат результата (raw, stream, data)maxBytes — ограничение размераПример:
const options = {
method: 'POST',
path: '/upload',
handler: uploadHandler,
payload: {
maxBytes: 1048576,
output: 'stream'
}
};
Это поле особенно важно при работе с файлами и потоковыми данными.
response управляет формированием ответа, включая
сериализацию и постобработку.
Пример:
const options = {
method: 'GET',
path: '/data',
handler: getData,
response: {
modify: true,
options: {
language: 'en'
}
}
};
Возможности поля:
cache отвечает за кэширование результата
обработчика.
Пример:
const options = {
method: 'GET',
path: '/stats',
handler: statsHandler,
cache: {
expiresIn: 60000,
privacy: 'public'
}
};
Основные параметры:
expiresIn — время жизни кэшаprivacy — уровень приватностиsegment — логическое разделение кэшаtimeout ограничивает время выполнения запроса.
Пример:
const options = {
method: 'GET',
path: '/slow-operation',
handler: slowHandler,
timeout: 5000
};
Если обработчик превышает заданное время, система прерывает выполнение и возвращает ошибку.
tags используется для маркировки маршрутов и последующей
фильтрации или логирования.
const options = {
method: 'GET',
path: '/metrics',
handler: metricsHandler,
tags: ['internal', 'metrics']
};
Применение:
pre задаёт цепочку предварительных обработчиков, которые
выполняются до основного handler.
Пример:
const options = {
method: 'GET',
path: '/dashboard',
pre: [
{ method: checkAuth },
{ method: loadUser }
],
handler: dashboardHandler
};
Особенности:
plugins используется для расширения поведения маршрута
через сторонние или внутренние модули.
const options = {
method: 'GET',
path: '/analytics',
handler: analyticsHandler,
plugins: {
logging: {
level: 'debug'
}
}
};
Механизм позволяет:
description и metadata применяются для
документирования маршрута и хранения вспомогательной информации.
const options = {
method: 'GET',
path: '/health',
handler: healthHandler,
description: 'Проверка состояния сервиса',
metadata: {
version: '1.0',
owner: 'backend-team'
}
};
Использование:
Объект options не является набором независимых
параметров. Его поля взаимодействуют между собой:
validate влияет на входные данные для
handlerauth определяет доступ к выполнению pre и
handlercache может полностью обходить handler при
наличии валидного кэшаtimeout может прерывать цепочку pre и
основной обработчикresponse применяется после выполнения всех этапов
обработкиТакая архитектура формирует декларативную модель поведения маршрута, где логика выполнения определяется конфигурацией, а не императивным кодом внутри обработчика.