segmentfault官方|为 Express 开外挂( 四 )
当然 Reflect 提供很多其他 API:
import 'reflect-metadata';
// 定义对象或属性的元数据
Reflect.defineMetadata(metadataKey, metadataValue, target);
Reflect.defineMetadata(metadataKey, metadataValue, target, propertyKey);
// 检查对象或属性的原型链上是否存在元数据键
letresult = Reflect.hasMetadata(metadataKey, target);
letresult = Reflect.hasMetadata(metadataKey, target, propertyKey);
// 检查对象或属性是否存在自己的元数据键
letresult = Reflect.hasMetadata(metadataKey, target);
letresult = Reflect.hasMetadata(metadataKey, target, propertyKey);
// 获取对象或属性原型链上元数据键的元数据值
letresult = Reflect.getMetadata(metadataKey, target);
letresult = Reflect.getMetadata(metadataKey, target, propertyKey);
// 获取对象或属性的自己的元数据键的元数据值
letresult = Reflect.getOwnMetadata(metadataKey, target);
letresult = Reflect.getOwnMetadata(metadataKey, target, propertyKey);
// 获取对象或属性原型链上的所有元数据键
letresult = Reflect.getMetadataKeys(target);
letresult = Reflect.getMetadataKeys(target, propertyKey);
// 获取对象或属性的所有自己的元数据键
letresult = Reflect.getOwnMetadataKeys(target);
letresult = Reflect.getOwnMetadataKeys(target, propertyKey);
// 从对象或属性中删除元数据
letresult = Reflect.deleteMetadata(metadataKey, target);
letresult = Reflect.deleteMetadata(metadataKey, target, propertyKey);
// 通过装饰器将元数据应用于构造函数
@Reflect.metadata(metadataKey, metadataValue)
class C {
// 通过装饰器将元数据应用于方法(属性)
@Reflect.metadata(metadataKey, metadataValue)
method{
}
}
需要记得配置 tsconfig.json:
需要记得配置 tsconfig.json:
{
"compilerOptions": {
"target": "es5",
"lib": [ "es6", "dom"],
"types": [ "reflect-metadata"],
"module": "commonjs",
"moduleResolution": "node",
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
在 Overnight 中主要使用有两个 API:
- 使用 Reflect.defineMetadata API 添加元数据;
- 使用 Reflect.getOwnMetadata API 读取元数据 。
本文插图
2.4 小结
这里回顾下 Relect Metadata 的知识:
本文插图
理解清楚前面两个知识点后 , 我们接下来开始看看 Overnight 。
三、Overnight 详解
1. 概念介绍
OvernightJS 主要是为 Express 路由提供 Type 装饰器支持 , 通过装饰器来管理路由 。
是不是抽象了点?那看看下面这段代码吧:
@Controller( 'api/posts')
exportclass PostController {
@Get( ':id')
private get(req: Request, res: Response) {
// dosomething
}
}
如上面代码所示 , OvernightJS 就是这样使用 , 简单 , 明了 。
推荐阅读
- 蝌蚪五线谱官方|云游杂记·琥珀屋丨杨枫【科幻微小说】
- 旅游那点事|史上最弯!一加8T官方宣布美背照:沾水会变色
- 症状|中国发布丨官方提醒公众旅行归来自我观察14天 有症状及时告知旅行史
- 深圳特区报官方微博|刚刚,诺贝尔文学奖揭晓!是她!
- 湖南经视官方账号|国庆长假期间湖南机场日均客流超过10万人次
- 官方|唐朝时的官方外交名是“大唐”,那清朝的是啥?说出来你可能不信
- 杂志之旅官方|“丧文化”大行其道,当代年轻人为何越来越厌世?
- 实用心理学官方号|心理学:不完美,也配好好活。时间不语,却回答了所有问题
- 趣头条|凯迪拉克发布官方草图,未来凯迪拉克SUV外观设计出炉
- 飞度|东本也要卖“飞度”了,本田LIFE胜算有多大?