segmentfault官方|为 Express 开外挂( 五 )


另外 OvernightJS 共提供了三个库:

  • OvernightJS/core:核心库;
  • OvernightJS/logger:日志记录工具库;
  • OvernightJS/jwt:JWT 库;
接下来主要介绍 OvernightJS/core 核心库 , 其他两个有兴趣可以自己看哈 , 举一反三 , 其实核心一样的 。
2. OvernightJS/core 快速上手
2.1 安装 OvernightJS/core
$ npm install --save @overnightjs/core express
$ npm install --save-dev @types/express
2.2 OvernightJS/core 示例代码
首先介绍下我们示例代码需要实现的功能:
  1. UserController 类 , 负责管理业务逻辑的控制器;
  2. ServerController 类 , 负责管理服务逻辑的控制器;
  3. 执行服务启动;
第一步 , 导入需要的依赖:
import { Controller, Get, Server } from '@overnightjs/core';
import { Request, Response } from 'express';
import * as bodyParser from 'body-parser';
const port = 3000;
第二步 , 实现 UserController 类:
@Controller( '/users')
class UserController {
@Get( '/:id')
private get(req: Request, res: Response) {
returnres.send(`hello, your id is: ${req.params.id}`)
}
@Get( '/list')
private getList(req: Request, res: Response) {
returnres.send([
{name: "leo", age: 17},
{name: "robin", age: 19}
])
}
}
在声明 UserController 类时 , 使用 OvernightJS/core 的 @Controller 装饰器 , 使用 "/users" 路径作为参数 , 作用是为当前路由控制器指定一个路由地址 , 可以理解为这组路由的“根路径” , 该类中实现的所有接口路径 , 都会以该“根路径”为基础 。
然后在UserController 类中 , 通过 OvernightJS/core 提供 @Get 装饰器 , 分别使用 "/:id" 和 "/list" 路径作为参数 , 绑定路由 。
最终 UserController 类实现的路由地址包括:
  • /user/:id
  • /users/list
第三步 , 实现 ServerController 类:
class ServerController extends Server {
constructor{
super;
this.app.use(bodyParser.json);
super.addControllers(new UserController);
}
public start(port?: number): void {
this.app.listen(port, => {console.log( '启动成功 , 端口号:',port)});
}
}
ServerController 类继承 OvernightJS/core 提供的 Server 类 , 通过在构造函数中调用 super.addControllers(new UserController) 来实现将前面声明好的路由控制器类 , 添加到OvernightJS/core 统一管理的控制器数组中 。
另外在该类中 , 我们还声明 start 方法 , 用来启动服务器 。
第四步 , 实现启动服务器逻辑:
const server = new ServerController;
server.start(port);
这里启动服务器就相当简单咯~~
整个实现示例代码的流程如下:
声明了两个类:UserController 和 ServerController, 分别为业务逻辑的控制器和服务逻辑的控制器 , 最后在主入口中去实例化 , 并执行实例化结果的 start 方法启动服务 。
最后完整代码如下:
import { Controller, Get, Server } from '@overnightjs/core';
import { Request, Response } from 'express';
import * as bodyParser from 'body-parser';
const port = 3000;
@Controller( 'users')


推荐阅读