intermediate

Middleware

Комбинируйте request handlers для cross-cutting concerns, контролируя order, ownership, short-circuiting и side effects.

Middleware оборачивает обработку запроса с сигнатурой `(req, res, next)` (стиль Express) или через хуки фреймворка — cross-cutting поведение в явном порядке.

					app.use(requestId());
app.use(express.json({ limit: '1mb' }));
app.use(authenticate);
app.get('/orders/:id', authorize('orders:read'), getOrder);

function asyncHandler(fn) {
  return (req, res, next) => Promise.resolve(fn(req, res, next)).catch(next);
}
				

Порядок важен: парсинг body до validation; auth до authorization; error middleware последним (handler с 4 аргументами). Short-circuit — ответ без `next()`.

Fastify hooks, Koa onion — разный API, тот же вопрос: кто владеет side effects и ошибками.

На интервью: порядок auth + validation; передача ошибок в центральный handler; global vs route-scoped.

Типовые ошибки: `next()` после отправки ответа; async без проброса ошибки; «божественный» middleware на все маршруты.

Чеклист:

  • Одна ответственность на middleware.
  • Задокументированный порядок.
  • Единый формат ошибок.
  • Осторожно с mutable полями на `req`.