NestJS将@Query()反序列化为具有复杂类型的DTO

问题描述 投票:0回答:1

在研究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();
}

我的问题是createdAftercreatedBeforesearchNotesDto中的字符串,并且我希望使用Date对象,有没有一种方法可以将那些字段隐式转换为Date

node.js typescript query-string nestjs dto
1个回答
0
投票

@Query将序列化所有属性以键入string,因为根据HTTP请求,这就是querystring的工作方式。您将需要使用Pipe将查询转换为正确的数据形状。

enter link description here

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;
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.