javascript - Er det mulig å sette standardverdier for en DTO?
Finnes det en måte å bruke standardverdier når en spørring er tom?
Hvis jeg har følgende DTO for en spørring:
export class MyQuery {
readonly myQueryItem: string;
}
Og min forespørsel inneholder ingen spørring, da vil myQuery.myQueryItem være udefinert. Hvordan kan jeg gjøre det slik at det har en standardverdi?
Svar #1
Du kan sette standard direkte i DTO-klassen din:
export class MyQuery {
readonly myQueryItem = 'mydefault';
}
Du må instansiere klassen slik at standardverdien brukes. Til det kan du for eksempel bruke ValidationPipe med alternativet transform: true. Hvis verdien settes av dine spørringsparametere, vil den bli overstyrt.
@Get()
@UsePipes(new ValidationPipe({ transform: true }))
getHello(@Query() query: MyQuery) {
return query;
}
Hvorfor fungerer dette?
1) Pipers brukes på alle dine dekoratører, for eksempel @Body(), @Param(), @Query() og kan transformere verdiene (for eksempel ParseIntPipe) eller utføre sjekker (for eksempel ValidationPipe).
2) ValidationPipe bruker internt class-validator og class-transformer for validering. For å kunne utføre validering på inngangen din (vanlige JavaScript-objekter) må den først transformere dem til din annoterte DTO-klasse, noe som betyr at den oppretter en instans av klassen din. Med innstillingen transform: true vil den automatisk opprette en instans av DTO-klassen din.
Eksempel (i hovedsak hvordan det fungerer):
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);
