intermediate

Express middleware

Объясняйте middleware order, request mutation, short-circuiting, async handlers, next() и boundary concerns вроде auth и parsing.

Middleware имеет сигнатуру `(req, res, next)` и выполняется в порядке регистрации. Каждый может менять `req`/`res`, завершить response или вызвать `next()`. Порядок важен: body parsers и auth — до route handlers.

					app.use(express.json({ limit: '100kb' }));
app.use(requestId);
app.use('/api', authMiddleware, apiRouter);
				

Async middleware должен передавать ошибки — `next(err)` в catch или обёртка, чтобы rejected promises дошли до error middleware. `next()` после `res.send()` даёт double-send.

На интервью: middleware stack как pipeline, когда short-circuit (auth failure, validation), разница `app.use` и route-level middleware для scope concerns.

Типовые ошибки: неверный порядок (routes до parsers), необработанные async rejections, слишком тяжёлый global middleware на каждый request.

Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.

Чеклист:

  • Сначала parsers и security middleware.
  • Оборачивайте async handlers для `next(err)`.
  • Ограничивайте auth префиксами маршрутов.
  • Не вызывайте `next()` после отправки response.