本人是一名 Node.js 实习生,在进入大搜车以后,有幸见识到 Akyuu.js 这个框架。可是这个框架是使用 Express + Callback 的方式,我不是很喜欢。在个人推荐以及社区的发展下,组长决定用 TS + Async/Await 来试一试。因而我也去了解了一下 TS 的后端框架有哪些,结果通过别人推荐,找到了 Nest.js 这个想法几乎和我如出一辙的框架。node
由于我这个不是教程向,因此就不细讲,能够查看 Nest.js 官网。从个人感性角度来说,简单说一下如下几个特色:数据库
resp.send(await getValue())
,而 koa 也是须要调用 ctx.body = await getValue()
。可是在 Nest.js 中,只须要 return await getValue()
便可。实现真正的同步编写业务逻辑代码。@nestjs/cli
,可是这个提供的仅仅是一个项目的建立的能力。不过总的来讲,前面几点也正是 Nest.js 灵活性的保证。可是咱们真正在开发当中,仍是须要一种合理的约束来保证开发的统一。后端
那么咱们这里针对上面的几个问题,尝试采用一些方式来进行约束。bash
咱们对项目指定以下的规则:框架
src
目录下main.ts
若是没有特殊状况,不动这个文件src/config
文件夹下MainModule
下。module
文件夹存放自定义的 Module,或者说但愿独立成模块可是尚未彻底独立出来的。其中目录结构和这个项目目录结构相似boot
文件夹是项目启动代码的时候执行的,这部分在 Nest.js 当中没有给出。我这里打算添加这个功能,可是尚未想好具体的实现形式,因此待定。interface
/enum
等数据随着对应的 service 导出。不另作说明。好比说 car.service.ts
除了能够导出 CarService
类之外,还能够导出 CarType
enum。dest
文件夹是编译以后的文件,能够直接输入 node dest/main.js
运行。user.model.ts
car.controller.ts
google.logic.ts
。可是好比说只是一个 Car
类,那么能够直接命名成 car.ts
export default
导出数据。一方面是为了方便导入的时候保证命名的统一,另外一方面能够随时导出 interface/enum 等内容。.spec.ts
或 .test.ts
结尾。|-- dest
|--- ...
|-- src
|-- config
|-- controller
|-- model
|-- service
|-- logic
|-- component
|-- boot
|-- module
|-- module-name
|-- config
|-- index.ts
|-- module-name.module.ts
|-- main.ts
|-- main.module.ts
复制代码
我目前初步的想法是经过提供一个 ConfigModule
暴露出一个 ConfigService
来提供配置的获取和查看。koa
在某些状况下,可能须要多级配置,模块级别的配置,应用级别的配置。那么 ConfigService
能够在获取配置的时候自动合并这些规则。async
如今已是 18 年了,不用 Docker 你真的对得起本身么?很明显是对不起的。因此进程管理这一块,咱们就交给 Docker 来处理。包括启动、中止、重启、日志等,都交给 Docker。工具
因而启动命令就能够简化成 node dest/main.js
便可。单元测试
那么你可能会想到,若是一个 Docker 环境给你分配了两个 u,那岂不是会浪费一个 u。理论上是的,那么你就能够经过 pm2 啊啥的本身去管理吧,哈哈哈,无论。学习
说了这么多,把上面的内容都沉淀下来,我得要给他取个名字,因而我就取成了 Iron。为啥叫 Iron 呢?由于 Iron Man。那为啥由于 Iron Man 呢?由于他制做的盔甲能够自由拆分,自动拼合。很是适合咱们这个项目的形态。
不过这个项目何时能沉淀下来,看我心情了。不过定个时间线吧,就在 4 月底,争取搞定。
由于这里面最大的问题就是配置的问题,须要深刻依赖注入,因此会麻烦一些。可是其余的方面更多的只是一种约束吧。
这就是我用 Nest.js 一周以来的心得。暂时就想到这么多,更多的内容等我后面再分析吧。
写完睡觉,答应女票了,啦啦啦~