преобразовать значение, если ложно

Я проверяю свои DTO с помощью пакета class- validator. Я включил преобразование через

app.useGlobalPipes(
  new ValidationPipe({
    transform: true,
  }),
);

в моем файле main.ts, как описано в документации

https://docs.nestjs.com/techniques/validation

У меня есть необязательное поле конфигурации в моем DTO. Это поле следует преобразовать в пустой объект, если он не существует. Декоратор преобразования описан здесь

https://docs.nestjs.com/techniques/serialization

Я надеялся найти такое решение:

export class MyDTO {
  @IsObject()
  @IsOptional()
  @Transform(configuration => configuration || {})
  public configuration: object;
}

Когда я вызываю свой маршрут API

@Post()
public create(@Body() myDTO: MyDTO): void {
  console.log(myDTO);
}

с пустым телом, поэтому без поля configuration мой MyDTO экземпляр

{}

хотя я ожидал, что это будет

{
    configuration: {}
}

Что не так или что мне не хватает? Я пытался отладить код, но он никогда не попадает в функцию преобразования. Так что@Transform не срабатывает.


Обновить

Кажется, я должен это сделать

@IsObject()
@IsOptional()
@Transform(configuration => configuration || {}) // will be used if the field exists
public configuration: object = {}; // will be used if the field doesn't exist

Если вы передадите пустое тело, будет использовано начальное значение. Преобразование выполняется, только если вы передаете поле, но присваиваете значение вродеnull к нему.

1 ответ

Решение

Пойдем дальше и поместим это сюда тоже: почему бы просто не позволить машинописному тексту управлять значением по умолчанию с установкой такого значения, как

export class MyDTO {
  @IsObject()
  @IsOptional()
  public configuration: object = {};
}

Таким образом, если вы получите значение - отлично, а если его нет, class-transform поместит туда правильное значение.

Похоже, здесь есть больше дискуссий о решениях.

Другие вопросы по тегам