Menu
CoddyTech

Неизвестные поля

Часть раздела 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.

challenge icon

Задание

Легко
  • 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();
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела TypeScript и NestJS