如何根据传递的参数动态调用服务?

How to make calls to services dynamic depending on parameters passed?

我有一个类似于 below.So 的 NestJS 控制器,具体取决于 URL 中传递的参数,我想重定向到正确的服务。 这些服务通常具有相同的功能和不同的功能,并且必须是单独的服务。 可以有多个服务(甚至可能超过 10 个)。只有 1 个控制器,我希望检查在控制器中的所有 functions/apis 中,所以 if/else 也将检查所有cumbersome.So如何集中化,以便我可以检查 id 参数并为所有 api 请求调用相关服务?

class Controller {

 contructor(private readonly cnnService:CnnService,private readonly bbcService:BbcService)

 @Get(':id') 
 getNewsData() {
  // if id is cnn then 
  return this.cnnService.getNews()
  // else if id is bbc then
  return this.bbcService.getNews()

}

}

应该是简单的if吧?

class Controller {

 contructor(private readonly cnnService:CnnService,private readonly bbcService:BbcService)

 @Get(':id') 
 getNewsData(@Param() { id }: {id: string}) {
  if ( id === 'cnn') {
    return this.cnnService.getNews()
  } else if (id === 'bcc') {
    return this.bbcService.getNews()
  } else {
    throw new BadRequestException(`Unknown News outlet ${id}`);
  }
 }

}

如果您有超过 4 个左右的服务,我建议您将每个服务注册为 custom provider,如下所示:

{
  provide: 'cnnService',
  useClass: CnnService
}

为您 NewsModule 中的每个新闻服务添加这种自定义提供程序,然后您可以根据需要注入 ModuleRef class and do return this.moduleRef.get(${id}Service).getNews() in your controller method to change between which service is used, catching errors in a filter