segmentfault官方|为 Express 开外挂( 二 )
router.post( '/', (req: Request, res: Response) => {res.send( 'Hello post!')});
router.put( '/', (req: Request, res: Response) => {res.send( 'Hello put!')});
router.delete( '/', (req: Request, res: Response) => {res.send( 'Hello delete!')});
router.get( '/user', (req: Request, res: Response) => {res.send( 'Hello api/user!')});
exportdefault router;
接着在 app.ts 中使用 , 由于express.Router是个中间件 , 因此可以使用 app.use来使用:
// app.ts
// 删除原来路由声明
import router from "../controller/app.router";
app.use( '/api', router);
这里 app.use 第一个参数 /api 表示这一组路由对象的根路径 , 第二个参数 router 表示一组路由对象 。
于是就实现了下面 API 接口:
- /api
- /api/user
幸运的是 , 已经有大佬实现这个外挂了 , 它就是今天主角——OvernightJS 。
下面一起看看这个很棒的 OvernightJS 吧 。
二、基础知识介绍
本文插图
在开始介绍 Overnight 之前 , 我们先回顾下“装饰器”和“Reflect”:
1. 装饰器
1.1 什么是装饰器?
Type 中 , 装饰器(Decorators)是一种特殊类型的声明 , 它能够被附加到类声明、方法、访问符、属性或参数上 , 本质上还是个函数 。
装饰器为我们在类的声明及成员上通过元编程语法添加标注提供了一种方式 。
需要记住这几点:
- 装饰器是一个声明(表达式);
- 该表达式被执行后 , 返回一个函数;
- 函数的入参分别为 target、name 和 deor;
- 执行该函数后 , 可能返回 deor 对象 , 用于配置 target 对象;
https://www.tslang.cn/docs/handbook/decorators.html 。
1.2 装饰器分类
装饰器一般包括:
- 【segmentfault官方|为 Express 开外挂】类装饰器(Class decorators);
- 属性装饰器(Property decorators);
- 方法装饰器(Method decorators);
- 参数装饰器(Parameter decorators);
这里以类装饰器(Class decorators)为例 , 介绍如何使用装饰器:
functionMyDecorators(target: Function): void {
target.prototype.say = function: void {
console.log( "Hello 前端自习课!");
};
}
@MyDecorators
class LeoClass {
constructor{}
say{console.log( "Hello Leo")}
}
letleo = new LeoClass;
leo.say;
// 'Hello Leo!';
1.4 编译结果
装饰器实际上非常简单 , 编译出来以后 , 只是个函数 , 我们接着看 。
这里以《1.3 示例代码》为例 , 看看它的编译结果:
"use strict";
var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDeor(target, key) : desc, d;
if(typeof Reflect === "object"&& typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
推荐阅读
- 蝌蚪五线谱官方|云游杂记·琥珀屋丨杨枫【科幻微小说】
- 旅游那点事|史上最弯!一加8T官方宣布美背照:沾水会变色
- 症状|中国发布丨官方提醒公众旅行归来自我观察14天 有症状及时告知旅行史
- 深圳特区报官方微博|刚刚,诺贝尔文学奖揭晓!是她!
- 湖南经视官方账号|国庆长假期间湖南机场日均客流超过10万人次
- 官方|唐朝时的官方外交名是“大唐”,那清朝的是啥?说出来你可能不信
- 杂志之旅官方|“丧文化”大行其道,当代年轻人为何越来越厌世?
- 实用心理学官方号|心理学:不完美,也配好好活。时间不语,却回答了所有问题
- 趣头条|凯迪拉克发布官方草图,未来凯迪拉克SUV外观设计出炉
- 飞度|东本也要卖“飞度”了,本田LIFE胜算有多大?