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;
   }
}