Вы можете установить значение по умолчанию непосредственно в вашем классе 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);