# mapper-router **Repository Path**: cgua/mapper-router ## Basic Information - **Project Name**: mapper-router - **Description**: 一个关注轻量及高性能的,类似于 NestJS/Spring 的 NodeJS WEB Framework - **Primary Language**: TypeScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-02-04 - **Last Updated**: 2021-04-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Router > Router 是一个追求轻量,极限性能的,类似于 NestJS/Spring 的轻量级框架 #### 〇、 轻量而易于拓展 为了追求轻量, Router 只依赖于作者自身所写的日志库及基础类型库。整体代码量不只有 200K 左右。 难能可贵的是 Router 并未牺牲任拓展性,且提供了极高自由度的可定制内容,主要如下: 0. 支持自定义错误的 Namespace 以支持客户端显示良好的多语言错误提示。 1. 框架内置的日志工具是可配置,可替换的。这使得 Router 在 debug 时能提供详尽的错误信息。 2. 框架的核心组件 Context 同样是可替换或是继承它实现更多的功能。 (ps: 相当于 express 的 request/response 或是 koa 的 Context 可以进行自由的拓展及继承)。 3. 装饰器的拓展同样的十分方便,不管是获取服务器的资源参数,还是从远程获取一个数值传递给参数都能够实现。 #### 一、 优秀的路由性能 > 区别于绝大部份的 Web 框架, Router 使用的路由方式是先构建静态路由表,使用时直接读取静态路由表。 > 这种实现方式有点类似于静态语言的编译过程,从而获得性能上的改善。 对于大部份的 Web 框架来说,路由一个请求的复杂度通常都是 O(n) 或是 O(logn)。 而 Router 路由一个请求的复杂度是 O(1)。 而付出的空间则仅仅是 函数指针 * 通用路由所匹配到静态路由数量 所占用的内存容间。 假如不使用通用路由,那么付出的额外空间代价甚至为 0。 #### 二、 高的可测试性 > 由于 Router 使用了 DI 策略,加上便于拓展的装饰器接口 ,使得单元测试及集成测试变得十分的简单。 0. 对接口进行测试和测试普通代码完全没有区别。 1. 就算是集成测试,也可以通过添加自定义的装饰器修改数据的读取,改变运行结果输出的方式,从而方便的进行测试。 **ps: 可参考 simple/api** ------------------ ### 代码示例: (略。见 simple 目录) ------------------ ### 单元测试及发布 单元测试的命名以 .test.ts 结尾,放在同级目录之下 执行单元测试 `./scripts.ps1 -Mode jest -TestName xxx` 可以通过 VScode 的 run task `jest-file` 可以对当前文件执行测试及覆盖报告 同样的,执行 `./scripts.ps1 publish` 可以执行自动发布,并更新版本号的最后一位数