Я использую nestJS и класс-трансформер внутри DTO.
Вот простой пример того, что я сделал и моя проблема:
export class SomeDTO{
@Transform(({ value }) => value === "true" || value === true || value === 1)
@IsBoolean()
doDelete : boolean;
}
Я даже пробовал @Transform(({ value }) => { return value === "true" || value === true || value === 1})
Теперь в моем контроллере:
@Post("something")
someOperation(@Body() data : SomeDTO){
console.info(data);
}
При регистрации данных предполагаемое логическое значение doDelete
по-прежнему является строкой и не было преобразовано в свой собственный логический тип.
Пытался ли предоставить какие-либо данные, подобные этому:
@Transform(({ value }) => { return false})
Но в контроллере данные останутся прежними, если мы установим для исходного DTO doDelete значение true. Это не преобразование в false, как мы подразумевали через @Transform()
.
Я сделал что-то не так? Благодарен за помощь и пролитие света.
Я пробовал эти связанные ссылки, но ничего не работает.
@JayMcDoniel Правильно. Я не поставил transform : true
на трубу проверки. Не могли бы вы опубликовать это в разделе ответов, чтобы я мог выбрать это в качестве решения? Спасибо за вашу помощь.
Если transform: true
не установлен в качестве параметра ValidationPipe
, то используемый вами @Transform()
будет использоваться только в памяти для проверки class-validator
и не будет сохраняться, поскольку значение передается вашему обработчику маршрута. Установка transform: true
означает, что Nest вернет значение plainToInstance
для того, что уже было отправлено.
У вас есть опция
transform: true
в вашемValidationPipe
?