7. Middleware
Middleware в tRPC — это функции, которые выполняются между получением запроса и вызовом основного обработчика процедуры. Они используются для логирования, аутентификации, авторизации, ограничения частоты запросов и многого другого.
Создание middleware
Заголовок раздела «Создание middleware»Middleware создаётся через t.middleware(). Функция middleware получает объект { ctx, next, input, type, path }. Для продолжения выполнения необходимо вызвать next(). Можно также расширить контекст, передав новый объект в next({ ctx: newCtx }).
Middleware аутентификации
Заголовок раздела «Middleware аутентификации»Самый распространённый middleware — проверка аутентификации. Он проверяет ctx.user, и если пользователь не авторизован, выбрасывает ошибку TRPCError({ code: 'UNAUTHORIZED' }). Если авторизован — обогащает контекст гарантированно не-null пользователем.
Цепочки middleware
Заголовок раздела «Цепочки middleware»Middleware можно выстраивать в цепочки: один middleware вызывает следующий через next(). Порядок имеет значение: первым выполняется первый middleware в цепочке. Это позволяет строить сложные pipelines обработки запросов.
Логирование
Заголовок раздела «Логирование»Logging middleware измеряет время выполнения процедуры: сохраняет время начала до вызова next() и логирует разницу после. Это мощный способ мониторинга производительности без изменения бизнес-логики.
Rate limiting
Заголовок раздела «Rate limiting»Middleware ограничения частоты запросов проверяет количество вызовов от конкретного пользователя или IP за временной интервал. При превышении лимита выбрасывается ошибка TOO_MANY_REQUESTS.