【发布时间】:2021-12-17 22:49:39
【问题描述】:
我有一个类似于下面描述的Person 类。
languages 是可选属性。它可能丢失或无效。
如果languages 丢失或无效,我不希望post call 失败。相反,我想将languages 设置为备用值,例如["en"]。
我该怎么做?
我研究了自定义验证器,但这似乎不合适,因为我既想运行所有验证,也想在验证失败时更改对象。
// interface
import { IsString, MinLength, IsNotEmpty } from 'class-validator';
class Person {
@IsNotEmpty()
public readonly name: string;
@IsArray()
@IsString({ each: true })
@MinLength(1)
public languages: string[]; // <-- how would I specify a fallback value?
}
// controller
import { Body, Controller, Post } from "@nestjs/common";
@Controller("signup")
export class SignupController {
@Post()
public async submit(@Body() formData: Person) {
// create the user object and save it to the db
}
}
【问题讨论】:
-
在你的类定义中加入
public languages: string[] = ['en']怎么样?只要您为验证管道的选项设置了transform: true,就应该设置此默认值 -
@JayMcDoniel 我对nestjs 不太熟悉。即使提供了值,是否也会设置该值?例如
languages: [2]我去看看 -
如果验证失败,无论如何你都会得到一个错误。这就是 ValidationPipe 的工作原理。没有办法告诉类验证器“嘿,如果你失败了,就用这个值代替”
-
> “嘿,如果你失败了,就用这个值代替”这正是我一直在尝试做的事情
-
我知道。使用类验证器无法立即做到这一点。您需要自己的包装器来管理错误处理。自定义管道可能会很好,但是您将无法全局绑定
ValidationPipe(除非您非常聪明)
标签: typescript validation nestjs class-validator