如何根据传递的参数动态调用服务?
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。
我有一个类似于 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。