为什么总是在NestJS中调用带有查询参数的第一个getter?

时间:2019-07-15 20:14:42

标签: nestjs

我有一个带有两个标记为Get()的函数的控制器,两个函数均带有@Query参数以接收数据。但是,即使我按给定顺序发送数据,也只会调用给定顺序中的第一个。我的代码有什么问题?

我已经切换了和的位置,但总是会调用第一个功能。

@Controller('pets')
export class PetsController {

  constructor(private readonly petsService: PetsService) {}

  @Get()
  findByCountry(@Query('country') country: string): Promise<Pet> {
    return this.petsService.findByCountry(country);
  }

  @Get()
  findByName(@Query('name') name: string) {
    return this.petsService.findByName(name);
  }
}

正常行为应为:

  • 致电../api/pets?country=意大利应进入findByCountry(...)

  • 调用../api/pets?name=Rudi应该进入findByName(...)

1 个答案:

答案 0 :(得分:2)

您应该使用预期的查询参数在@Get()装饰器中定义路线,否则Nest(和Express)将仅匹配第一个路线。在这种情况下,即使您试图从它们中获取查询参数,两条路由看起来都像'/pets'一样没有什么特别的。相反,请尝试将您的控制器设置为这样

@Controller('pets')
export class PetsController {

  constructor(private readonly petsService: PetsService) {}

  @Get()
  findByCountry(@Query('country') country: string, @Query('name') name: string): Promise<Pet> {
    if (country) {
      return this.petsService.findByCountry(country);
    } else if {
      return this.petService.findByName(name);
    }
  }
}

这样您现在就可以根据输入的参数来运行期望的代码。当然,如果它们一次出现,这将是一个问题。