NestJSЩо нового в NestJS 12.2
Реліз NestJS 12.2 додає нові ліміти для SSE, WebSockets і валідації, змінює поведінку ValidationPipe та покращує зіставлення виключень у middleware.
Реліз від 19 жовтня 2026 · оновлено 9 листопада 2026
Головне
- Нова опція maxPendingDataLength для декоратора @Sse
- Параметр maxConcurrentMessages для IoAdapter та WsAdapter
- Обмеження довжини повідомлень про помилки у ValidationPipe
- Узгодження MiddlewareConsumer.exclude() з логікою роутера
- Нові ліміти на розмір повідомлень у Kafka та таймаут з'єднання для TCP
Коротко
У релізі NestJS 12.2 з'явилися нові конфігураційні параметри для обмеження навантаження у потоках SSE, WebSocket-адаптерах, валідації та мікросервісах. Також оновлено низку стандартних налаштувань безпеки й парсингу даних, змінено логіку обробки помилок у ValidationPipe та вдосконалено алгоритми виключення маршрутів у middleware.
Нові можливості
Нові опції конфігурації
- Обмеження буфера SSE: Декоратор
@Sse({ maxPendingDataLength })дозволяє задати кількість символів даних подій, що можуть очікувати клієнта, який не читає потік (за замовчуванням 4M; значення0абоInfinityзнімають обмеження). - Паралельні повідомлення у WebSockets: Класи
IoAdapterтаWsAdapterотримали параметрmaxConcurrentMessages, що визначає кількість одночасно оброблюваних повідомлень клієнта (за замовчуванням 1000;Infinityзнімає ліміт). - Ліміт помилок валідації: Для
ValidationPipeдодано прапорецьmaxErrorMessagesLength(за замовчуванням 1 000 000 символів); помилки понад цей ліміт замінюються записом «Further validation errors were omitted». - Ліміт розміру повідомлень Kafka: Додано параметр
parser.maxMessageSize(за замовчуванням 16 MiB після розпакування); більші повідомлення логуються та пропускаються. - Таймаут очищення TCP: У TCP-сервері з'явився параметр
drainTimeout(30 секунд за замовчуванням,0вимикає), що розриває з'єднання з клієнтом, який залишає відповіді непрочитаними. - Повторне підключення MQTT: Параметр
reconnectOnConnackErrorдля MQTT-сервера тепер увімкнено за замовчуванням, завдяки чому запит на підключення повторюється у разі відмови (для попередньої поведінки слід вказатиfalse). - Хук зіставлення шляхів: Додано необов'язковий хук адаптера
HttpServer.getRouteMatchingOptions(), який передає ядру інформацію про те, як роутер зіставляє шляхи.
Нові значення за замовчуванням та зміни в поведінці
- Глибина вкладеності та ліміти масивів: У пакетах
@nestjs/platform-expressта@nestjs/platform-fastifyпараметриfieldNestingDepthіfieldArrayIndexLimitтепер за замовчуванням дорівнюють 32 та 1000 відповідно (встановлення вInfinityзнімає ліміти). - Поведінка
ValidationPipe:- Валідація за замовчуванням виконується з
validationError.target: false, томуexceptionFactory, яка зчитуєerror.target, отримуєundefined(для повернення старої поведінки потрібне значенняtrue). - Передача масиву або примітиву замість очікуваного валідованого класу тепер повертає статус 400.
- Валідація за замовчуванням виконується з
FileTypeValidator: Зіставлення рядкового значенняfileTypeтепер виконується до кінця назви (наприклад,font/woffбільше не приймаєfont/woff2; для таких випадків слід використовуватиRegExp).- Обробка помилок:
BaseExceptionFilterвідповідає стандартною фразою причини замість тексту повідомлення для помилокhttp-errors, створених зexpose: false(за замовчуванням для статусів від 500).- Помилки
StreamableFileповертають статус 400, але тіло відповіді більше не містить самого повідомлення про помилку.
- Очищення завантажених файлів: Файли, завантажені із запитом, який був відхилений пайпом, тепер видаляються зі сховища.
- Платформні адаптери:
- У
@nestjs/platform-fastifyмаршрут зfileSize: undefined(абоnull) використовує ліміт плагіна;Infinityзалишає завантаження необмеженими. - У
@nestjs/platform-expressоб'єкти помилок надсилаються якapplication/jsonна маршрутах із типомContent-Type, відмінним від JSON.
- У
- Логування та DI:
ConsoleLoggerу режимі JSON обрізає запис, якщо його довжина перевищує приблизно мільйон символів.- Глобальний енхансер, який інжектор не зміг ініціалізувати, тепер зупиняє запуск застосунку з помилкою.
- Для
APP_FILTERзі scopeRequestабоTransientпід час запуску виводиться попередження, оскільки такий фільтр застосовується лише до винятків із контролерів.
- Мікросервіси та Kafka:
- Ключ патерну довший за 256 символів більше не збігається з жодним обробником.
- Повідомлення Kafka тепер можуть містити до 10 000 значень заголовків; заголовки, передані як рядок чи масив, не надсилаються; заголовки відповідей декодуються як текст.
- У gRPC вхідні потоки запитів призупиняються, доки очікується запис відповідей на них.
- Застаріла функціональність (Deprecation): На транспортах TCP, Redis, NATS, MQTT та RabbitMQ обробник
@EventPattern(), який відповідає на викликClientProxy#send(), тепер логує попередження про застарілий підхід (у наступній мажорній версії обробники подій перестануть відповідати наsend()).
Виключення в Middleware
- Метод
MiddlewareConsumer.exclude()тепер компілює виключені маршрути з урахуванням налаштувань роутера щодо регістру та завершального слеша (потрібне спільне оновлення@nestjs/coreта адаптерів@nestjs/platform-express/@nestjs/platform-fastify). - У разі використання версіонування через заголовки, media type або кастомні правила,
exclude({ path, method, version })таenableCsrfProtection({ exclude })діють лише на запити, які запитують одну з виключених версій. - У
@nestjs/platform-fastifyхук запиту дляenableCsrfProtection()таuseSecurityHeaders()тепер виконується перед Nest і middlewareapp.use()також під час викликуNestFactory.create().
Виправлення та покращення
- Fastify: Заголовки безпеки додаються до відповідей роутера з помилками, виправлено очищення залишків файлів у пам'яті після буферизації та передачу помилок екстрактора версій до обробника помилок.
- Мікросервіси:
- Запобігання блокуванню TCP-відповідей у клієнті під час backpressure та зупинка відправки відповідей
Observable, якщо клієнт відключився. - Виправлено зіставлення пустих рівнів топіків MQTT і додано відхилення топіків довжиною понад 65535 байт.
- У RabbitMQ додано закриття каналу перед закриттям з'єднання та відновлення споживання після скасування consumer.
- Для NATS та генерації ID запитів тепер використовуються непередбачувані ідентифікатори.
- Запобігання блокуванню TCP-відповідей у клієнті під час backpressure та зупинка відправки відповідей
- Ядро (Core):
- Підтримка запуску класів перехоплювачів, пайпів, фільтрів та гардів, зареєстрованих без імені.
- Виявлення циклічних залежностей у request-scoped forward references.
- Коректне монтування middleware для контролерів під час використання префіксів, версіонування та модулів, що наслідують інші модулі.
- Приховування внутрішніх повідомлень про помилки у подіях SSE та коректне передавання помилок заголовків SSE до фільтрів винятків.
Огляд підготовлено автоматично за офіційними release notes за допомогою ШІ та перевірено на відповідність джерелу. Точні формулювання дивіться в оригіналі. Як ми працюємо