我有一个带有两个标记为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(...)
答案 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);
}
}
}
这样您现在就可以根据输入的参数来运行期望的代码。当然,如果它们一次出现,这将是一个问题。