Я проверяю свои 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
.