typescript - NestJS如何在管道中访问抽象控制器中的存储库
问题描述
我有包含管道 CanGetPipe 的 BaseController ( Abstract )
export abstract class CanGetPipe implements PipeTransform {
protected abstract readonly repository: Repository<IEntry>;
...
并为它混入
export const makeCanGetPipe = (repoName: any) =>
mixin(
class extends CanGetPipe {
protected readonly repository = getConnection().getRepository<IEntity>(repoName);
},
);
BaseControlle 的 Get 方法如下所示:
@Get('/:id')
@UsePipes(makeCanGetPipe(REPOSITORY_NAME_FROM_CHILD_CONTROLLER))
getOne(@ValidateData() validate: ValidateParam, @Param('id') id: number) {
return this.Service.get(id, validate);
}
我如何REPOSITORY_NAME_FROM_CHILD_CONTROLLER
在子控制器中设置而不是从 BaseController 继承?
或者,我如何能够访问分配给 BaseController 的管道中子控制器的存储库(服务、依赖项)?
解决方案
我认为您可以使用以下组合:
@SetMetadata('repoName', YOUR_VALUE)
在你的孩子班上- 而不是管道 - 使用 Guard
const repoName = this.reflector.get<string>('repoName', context.getClass());
这应该可以解决问题,您将能够为您的 BaseGuard 获得自定义 repo :)
推荐阅读
- flutter - 类型“TextEditingController”不是类型转换中“int”类型的子类型
- r - 拒绝所有变量
- php - 我正在登录我的后端页面,他收到错误用户名和密码不匹配,但我的电子邮件 ID 和密码在 MySQL 服务器中是正确的
- sql-server - 将数据加载到内存中或多次选择
- regex - 使用括号在scala中提取json响应值的问题
- reactjs - 与快递服务器做出反应,在邮寄时给我 400
- java - 为什么我会收到 TransactionTooLargeException?
- firewall - Mikrotik - 限制特定端口的上传速度
- azure - 所有实例均未在 Azure 应用服务中运行
- c++ - 逆向电脑猜谜游戏的问题