Перейти к содержимому

7. Middleware

Middleware в tRPC — это функции, которые выполняются между получением запроса и вызовом основного обработчика процедуры. Они используются для логирования, аутентификации, авторизации, ограничения частоты запросов и многого другого.

Middleware создаётся через t.middleware(). Функция middleware получает объект { ctx, next, input, type, path }. Для продолжения выполнения необходимо вызвать next(). Можно также расширить контекст, передав новый объект в next({ ctx: newCtx }).

Самый распространённый middleware — проверка аутентификации. Он проверяет ctx.user, и если пользователь не авторизован, выбрасывает ошибку TRPCError({ code: 'UNAUTHORIZED' }). Если авторизован — обогащает контекст гарантированно не-null пользователем.

Middleware можно выстраивать в цепочки: один middleware вызывает следующий через next(). Порядок имеет значение: первым выполняется первый middleware в цепочке. Это позволяет строить сложные pipelines обработки запросов.

Logging middleware измеряет время выполнения процедуры: сохраняет время начала до вызова next() и логирует разницу после. Это мощный способ мониторинга производительности без изменения бизнес-логики.

Middleware ограничения частоты запросов проверяет количество вызовов от конкретного пользователя или IP за временной интервал. При превышении лимита выбрасывается ошибка TOO_MANY_REQUESTS.