node.js - NestJS @Query()-ის დესერიულიზაცია DTO-ში რთული ტიპებით
NestJS-ის სწავლისას მე შევხვდი პრობლემას, მე მაქვს შემდეგი DTO:
export default class SearchNotesDto {
query: string;
createdAfter: Date;
createdBefore: Date;
}
რასაც მე გისურვებ, რომ მივიღო, როდესაც GET მოთხოვნა კეთდება წერტილზე, რომელიც მუშავდება ჩემს კონტროლერში შემდეგი ფუნქციით:
@Get()
getNotes(@Query() searchNotesDto: SearchNotesDto): Note[] {
if (Object.keys(searchNotesDto).length) {
return this.notesService.searchNotes(searchNotesDto);
}
return this.notesService.getAllNotes();
}
ჩემს პრობლემას წარმოადგენს ის, რომ createdAfter და createdBefore არის სტრიქონები searchNotesDto-ში, და მე მსურს მუშაობა Date ობიექტთან, არსებობს გზა, რომ იმპორტულად გადავიტანო ეს ველები Date-ში?
პასუხი #1
@Query სერიული გახდის ყველა თვისებას ტიპში string, რადგან ასე მუშაობს query string HTTP მოთხოვნის თვალსაზრისით. თქვენ დაგჭირდებათ Pipe-ის გამოყენება თქვენი query-ს მონაცემების სწორ ფორმატში გადასაყვანად.
https://docs.nestjs.com/pipes
export class SearchNotePipe implements PipeTransform {
transform(value: any, metadata: ArgumentMetadata) {
// value will be your `searchNotesDto`
const notesDto = new SearchNotesDto();
// do your transformation here
return notesDto;
}
}
