查询为空时是否可以使用默认值?
如果我要查询以下DTO:
export class MyQuery {
readonly myQueryItem: string;
}
并且我的请求不包含查询,那么myQuery.myQueryItem
将不确定。如何使其具有默认值?
答案 0 :(得分:2)
您可以直接在DTO类中设置默认值:
export class MyQuery {
readonly myQueryItem = 'mydefault';
}
您必须实例化该类,以便使用默认值。为此,您可以例如将ValidationPipe
与选项transform: true
一起使用。如果该值由您的查询参数设置,它将被覆盖。
@Get()
@UsePipes(new ValidationPipe({ transform: true }))
getHello(@Query() query: MyQuery) {
return query;
}
1)将管道应用于您的所有装饰器,例如@Body()
,@Param()
,@Query()
,并且可以转换值(例如ParseIntPipe
)或执行检查(例如ValidationPipe
)。
2)ValidationPipe
内部使用class-validator
和class-transformer
进行验证。为了能够对您的输入(纯Javascript对象)执行验证,它首先必须将其转换为带注释的dto类,这意味着它将创建您的类的实例。设置为transform: true
时,它将自动创建dto类的实例。
示例(基本上是如何工作的):
class Person {
firstname: string;
lastname?: string = 'May';
constructor(person) {
Object.assign(this, person);
}
}
// You can use Person as a type for a plain object -> no default value
const personInput: Person = { firstname: 'Yuna' };
// When an actual instance of the class is created, it uses the default value
const personInstance: Person = new Person(personInput);
答案 1 :(得分:0)
仅在Dto中提供一个值,如下所示:
export class MyQuery {
readonly myQueryItem: string = 'value default';
}