Loopbackjs 如何获得loopback4模型的完整列表,以便在引导时评估自定义装饰器元数据?
我目前正在将Loopbackjs 如何获得loopback4模型的完整列表,以便在引导时评估自定义装饰器元数据?,loopbackjs,loopback4,Loopbackjs,Loopback4,我目前正在将loopback3应用程序迁移到loopback4。我已经用带有一些元数据的自定义typescript装饰器对我的loopback4模型中的属性进行了注释 如何在启动时获得完整的模型列表并评估它们的元数据 我用LifeCycleObserver做了一些实验,但没有找到一种方法,在所有模型都准备好时如何得到通知,也没有找到它们的列表 下面是我要处理的元数据的简化示例。请注意:@propertyAcl是一个自定义装饰器 导出类Model1扩展了AuditMixin(SoftdeleteM
loopback3
应用程序迁移到loopback4
。我已经用带有一些元数据的自定义typescript装饰器对我的loopback4
模型中的属性进行了注释
如何在启动时获得完整的模型列表并评估它们的元数据
我用LifeCycleObserver
做了一些实验,但没有找到一种方法,在所有模型都准备好时如何得到通知,也没有找到它们的列表
下面是我要处理的元数据的简化示例。请注意:@propertyAcl
是一个自定义装饰器
导出类Model1扩展了AuditMixin(SoftdeleteMixin(AbstractEntity)){
// ...
@财产()
@财产({
“角色1”:权限。读写,
“role2”:Permission.READONLY,
})
myproperty?:字符串;
// ...
}
我需要在启动时使用元数据配置外部库accesscontrol
。其思想是为每个模型创建基于属性的ACL
如何在启动时获得完整的模型列表并评估它们的元数据
概述
用于创建装饰器
,并通过MetadataInspector
定义/获取元数据
上下文
“B”mergeWithInherited
函数之外,我们在该函数中存储(定义)您在设计时注释到“B”的属性的元数据装饰器“C”
//1
A类扩展PropertyCoratorFactory{
构造函数(键:字符串,规范:对象,选项?:装饰选项|未定义){
超级(键、规格、选项);
}
// 3
mergeWithInherited(inheritedMetadata:MetadataMap,target:Object,propertyName?:string,DescriptorIndex?:TypedPropertyDescriptor | number):任意{
//将元数据定义为“B”
MetadataInspector.DesignTimeReflector.defineMetadata(`target.constructor.name}.${propertyName}`,this.spec,B);
}
}
// 2
导出常量B=新上下文(“B.Context”);
// 4
导出函数C(规范:对象):PropertyCorator{
返回一个.createDecorator(
“C.装饰师”,
规格,
);
}
步骤5
类ModelFoo扩展模型{
@财产({
键入:“字符串”
})
p1?:字符串;
@C({元数据:“这是ModelFoo”})
@财产({
键入:“字符串”
})
p2?:字符串;
}
类ModelBar扩展了模型{
@财产({
键入:“字符串”
})
p1?:字符串;
@C({元数据:“这是ModelBar”})
@财产({
键入:“字符串”
})
p2?:字符串;
}
步骤6
功能测试(){
//获取“B”中的所有元数据密钥
let键:string[]=MetadataInspector.DesignTimeReflector.getMetadataKeys(B);
//输出>>>>['ModelFoo.p2','ModelBar.p2']
控制台日志(键);
//使用“B”中的“ModelFoo.p2”获取元数据
让metadata=MetadataInspector.DesignTimeReflector.getMetadata(键[0],B);
//输出>>>{元数据:“这是ModelFoo'}
console.log(元数据);
//做点什么。。。
}
如何在启动时获得完整的模型列表并评估它们的元数据
概述
用于创建装饰器
,并通过MetadataInspector
定义/获取元数据
上下文
“B”mergeWithInherited
函数之外,我们在该函数中存储(定义)您在设计时注释到“B”的属性的元数据装饰器“C”
//1
A类扩展PropertyCoratorFactory{
构造函数(键:字符串,规范:对象,选项?:装饰选项|未定义){
超级(键、规格、选项);
}
// 3
mergeWithInherited(inheritedMetadata:MetadataMap,target:Object,propertyName?:string,DescriptorIndex?:TypedPropertyDescriptor | number):任意{
//将元数据定义为“B”
MetadataInspector.DesignTimeReflector.defineMetadata(`target.constructor.name}.${propertyName}`,this.spec,B);
}
}
// 2
导出常量B=新上下文(“B.Context”);
// 4
导出函数C(规范:对象):PropertyCorator{
返回一个.createDecorator(
“C.装饰师”,
规格,
);
}
步骤5
类ModelFoo扩展模型{
@财产({
键入:“字符串”
})
p1?:字符串;
@C({元数据:“这是ModelFoo”})
@财产({
键入:“字符串”
})
p2?:字符串;
}
类ModelBar扩展了模型{
@财产({
键入:“字符串”
})
p1?:字符串;
@C({元数据:“这是ModelBar”})
@财产({
键入:“字符串”
})
p2?:字符串;
}
步骤6
功能测试(){
//获取“B”中的所有元数据密钥
let键:string[]=MetadataInspector.DesignTimeReflector.getMetadataKeys(B);
//输出>>>>['ModelFoo.p2','ModelBar.p2']
控制台日志(键);
//使用“B”中的“ModelFoo.p2”获取元数据
让metadata=MetadataInspector.DesignTimeReflector.getMetadata(键[0],B);
//输出>>>{元数据:“这是ModelFoo'}
console.log(元数据);
//做点什么。。。
}
根据我的理解,您希望在每个模型的属性上使用自定义装饰器,然后在类中取出所有相关元数据是的,像这样的。据我所知,没有任何
ModelBooter
可用于所有现有loopback4
模型。据我所知,您希望使用自定义的