我如何使用NestJS处理查询参数?

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

主题行差不多。

我有一个基于NestJS的REST API服务器。我想像这样处理查询参数:

http://localhost:3000/todos?complete=false 

我似乎无法弄清楚控制器如何处理该问题。

现在我有:

  @Get()
  async getTodos(@Query('complete') isComplete: boolean) {
    const todosEntities = await this.todosService.getTodosWithComlete(isComplete);
    const todos = classToPlain(todosEntities);
    return todos;
  }

但是总是返回完成的待办事项,而不是那些完成=假的情况。

这里是getTodosWithComlete的电话:

  async getTodosWithComplete(isComplete?: boolean): Promise<Todo[]> {
    return this.todosRepository.find({
      complete: isComplete,
      isDeleted: false,
    });
  }

如何根据查询参数返回正确的todos

typescript rest nestjs
2个回答
0
投票

嗯,事实证明这是“真实/虚假”的事情。另外,它需要有自己的路径:

 @Get('complete')
  async getTodos(@Query('iscomplete') isComplete: string) {
    if (isComplete === 'true') {
      const todosEntities = await this.todosService.getCompletedTodos();
      const todos = classToPlain(todosEntities);
      return todos;
    } else {
      const todosEntities = await this.todosService.getIncompleteTodos();
      const todos = classToPlain(todosEntities);
      return todos;
    }
  }

0
投票

默认情况下,所有查询参数都是字符串。如果要在函数getTodos中注入布尔值,则可以使用管道类来转换参数。根据https://docs.nestjs.com/pipes,NestJS中已经有一些内置管道,其中之一称为ParseBoolPipe

因此需要将其作为第二个参数插入到查询装饰器中>

@Get()
  async getTodos(@Query('complete', ParseBoolPipe) isComplete: boolean) {
    const todosEntities = await this.todosService.getTodosWithComlete(isComplete);
    const todos = classToPlain(todosEntities);
    return todos;
 }
© www.soinside.com 2019 - 2024. All rights reserved.