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.