segmentfault官方|为 Express 开外挂( 七 )
controllers.forEach((controller: Controller) => {
this.app.use(routerAndPath.basePath, routerAndPath.router);
});
}
从上面代码可以看出 ,addControllers 方法支持传入单个 controller 或一个数组的 controller , 方法内通过 forEach 遍历每个控制器 , 并将 path 和 router 作为参数传入 app.use 方法中 , 实现 Express 的路由注册 。
四、Overnight VS Express
从前面概念介绍中 , 我们知道:OvernightJS 主要是为 Express 路由提供 Type 装饰器支持 , 通过装饰器来管理路由 。
那么使用 OvernightJS 跟没有使用有什么区别呢?
下面我们分别通过 OvernightJS 和 Express 实现相同功能 , 功能包括:本地启动 4000 端口 , 支持 api/users/:id 接口 。
1. OvernightJS 实现
首先实现入口文件 , 其中通过实例化 ServerController 类 , 并执行实例化结构的 start 方法来启动服务:
// customApp.ts
import ServerController from "../controller/custom.server.controller";
const port = 4000;
const server = new ServerController;
server.start(port);
其中 tsconfig.json 配置如下:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"strict": true,
"esModuleInterop": true,
"experimentalDecorators": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
}
}
大致过程如上面代码 , 接下来要开始实现具体的 ServerController 类:
// controller/custom.server.controller.ts
import { Server } from "@overnightjs/core";
import RouterController from "./custom.router.controller";
class ServerController extends Server {
constructor{
super;
super.addControllers(new RouterController);
}
public start(port?: number): void {
this.app.listen(port, => {
console.log( '启动成功 , 端口号:',port)});
}
}
exportdefault ServerController;
最后实现 RouterController 类 , 该 API 下的路由方法 , 都定义在这个类中:
// controller/custom.router.controller.ts
import { Request, Response } from 'express';
import { Controller, Get, Put } from '@overnightjs/core';
@Controller( "api/users")
class RouterController {
@Get( ":id")
private get(req:Request, res:Response): any{
res.send( "hello leo!")
}
}
exportdefault RouterController;
2. Express 实现
跟前面一下 , 这里也是先实现入口文件:
// app.ts
import ServerController from "../controller/server.controller";
const port = 4000;
const server = new ServerController;
server.start(port);
然后实现具体的 ServerController 类:
// controller/server.controller/.ts
import express, { Application } from 'express';
import RouterController from "./router.controller";
class ServerController {
app: Application = express;
constructor{this.addControllers};
public addControllers{
const Router = new RouterController.getController;
this.app.use( '/api/users', Router);
}
public start(port?: number): void {
this.app.listen(port, => {console.log( '启动成功 , 端口号:',port)});
推荐阅读
- 蝌蚪五线谱官方|云游杂记·琥珀屋丨杨枫【科幻微小说】
- 旅游那点事|史上最弯!一加8T官方宣布美背照:沾水会变色
- 症状|中国发布丨官方提醒公众旅行归来自我观察14天 有症状及时告知旅行史
- 深圳特区报官方微博|刚刚,诺贝尔文学奖揭晓!是她!
- 湖南经视官方账号|国庆长假期间湖南机场日均客流超过10万人次
- 官方|唐朝时的官方外交名是“大唐”,那清朝的是啥?说出来你可能不信
- 杂志之旅官方|“丧文化”大行其道,当代年轻人为何越来越厌世?
- 实用心理学官方号|心理学:不完美,也配好好活。时间不语,却回答了所有问题
- 趣头条|凯迪拉克发布官方草图,未来凯迪拉克SUV外观设计出炉
- 飞度|东本也要卖“飞度”了,本田LIFE胜算有多大?