преобразовать значение, если ложно
Я проверяю свои 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 поместит туда правильное значение.