intermediate

Express validation

Валидируйте params, query, body, headers, auth context, payload size и normalized DTOs до запуска application logic.

Валидируйте params, query, body и headers на HTTP boundary до business logic. Schema-библиотеки (Zod, Joi, valibot) парсят unknown input в typed DTO и дают структурированные validation errors.

					const createUserSchema = z.object({
  email: z.string().email(),
  age: z.coerce.number().int().min(18),
});

function validateBody(schema) {
  return (req, res, next) => {
    const result = schema.safeParse(req.body);
    if (!result.success) return next(new ValidationError(result.error));
    req.dto = result.data;
    next();
  };
}
				

Осознанно приводите типы (`z.coerce.number`), ограничивайте размер payload в parser, отклоняйте лишние ключи при strict contracts. Нормализованные DTO на `req`, handlers не читают сырой `req.body`.

На интервью: validation middleware против ручных `if`, field-level errors (422), validation до auth где возможно — меньше attack surface.

Типовые ошибки: доверие `req.body` после частичных проверок, нет max body size, разные правила на маршрутах без shared schemas.

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

Чеклист:

  • Вся external input на boundary.
  • Shared schemas для create/update.
  • Структурированные field-aware errors.
  • Лимиты parser и отказ от oversize payloads.