Неизвестные поля
Часть раздела TypeScript и NestJS путешествия по Node.js на Coddy. Урок 12 из 17.
Клиент может отправить поля, о которых в вашем DTO нет ни слова, например { "title": "x", "admin": true }, и они попадут в ваш код без изменений. Для таких полей у ValidationPipe есть два параметра.
app.useGlobalPipes(
new ValidationPipe({ whitelist: true }),
);whitelist: true удаляет все поля без декоратора валидации до того, как ваш метод получит тело запроса. Добавьте forbidNonWhitelisted: true, и тогда pipe вместо этого отклонит такое тело с кодом 400 и сообщением "property admin should not exist". forbidNonWhitelisted работает только вместе с whitelist; отдельно этот параметр ничего не делает.
Тихое удаление подходит для формы, которая отправляет лишние поля. Отклонение позволяет клиенту API узнать об опечатке, например titel.
Задание
ЛегкоPOST /tasksс полемCreateTaskDtoне возвращает ответ 400 с указанием этого поля.- Для корректных тел запросов по-прежнему возвращается ответ 201.
- Отправь
POST /tasksс{ "title": "Book flights", "owner": "admin" }, затем с{ "title": "Book flights" }.
Попробуйте сами
import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe());
await app.listen(3000);
}
bootstrap();
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.