Как мне обработать параметр запроса, используя Nest JS? - PullRequest
1 голос
/ 04 апреля 2020

Сюжетная линия в основном такова.

У меня есть сервер REST API на основе Nest JS. Я хочу обработать параметр запроса следующим образом:

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

, но это всегда возвращает завершенные задачи, а не те, где полные = false.

Вот вызов getTodosWithComlete:

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

Как вернуть правильный todos на основе параметра запроса?

1 Ответ

1 голос
/ 06 апреля 2020

По умолчанию все параметры запроса являются строковыми. Если вы хотите, чтобы в вашей функции getTodos была введена логическая переменная, вы можете использовать конвейерные классы для преобразования ваших параметров. Согласно https://docs.nestjs.com/pipes, в Nest JS уже есть некоторые встроенные каналы, один из них называется ParseBoolPipe

, поэтому необходимо добавить его в декоратор запросов в качестве второго аргумента

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