преобразовать значение, если ложь - PullRequest
0 голосов
/ 23 февраля 2020

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

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

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

https://docs.nestjs.com/techniques/validation#transform -payload-objects

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

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

Я надеялся придумать это решение:

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 Ответ

1 голос
/ 23 февраля 2020

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

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

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

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

...