2019-12-17 nest.js框架初步探究
参考资料:
- nest.js
- mongoose
- typegoose
- nestjs+vuejs全栈开发
前言
在接触了一段时间的nestjs之后,我可以说是十分惊喜。
随着express项目的越写越多,本人也感觉到了目前的项目结构有些问题。
虽然是勉强按照routes、controllers、services、middleware等划分实现了初步解耦,但还是存在着很大的耦合,不利于项目的升级和优化。
本人写的项目都还算简单的,可以想象如果是大项目按照这个结构多半会有问题。
下面就来讲述下nest的优势所在
控制器
关于控制器,就是接受应用的特定请求。而使用装饰器能够快速将一个控制器挂载到路由,因此项目结构中直接就少了routes,因为没有任何必要了。
1 | import { Controller, Get } from '@nestjs/common'; |
提供者
主要提下service。简单的说就是把复杂的逻辑放到service中,确保控制器中只有简单的响应逻辑。
模块
模块(Module)是nest项目解耦的核心保障。正是通过Module来组织项目,划分逻辑,确保各个模块的独立性,降低耦合性。
异常过滤器
在后台开发中也经常会遇到这样的问题,例如未捕获的异常导致pm2进程重启。对于后台开发者来讲,虽然有pm2这样的进程守护,但显然要关心一下未捕获的异常。而nest提供了全局的异常捕获机制,对于非HttpException的异常也能优雅的返回个500响应,如果是HttpException则和一般的响应一致。不会出现后台崩了前端一直没有响应的问题。而后台开发者也就只需要关心下500响应, 看看是哪里出了问题。【可以看出非常优雅】
1 | { |
API文档生成(Swagger)
OpenAPI(Swagger)规范是一种用于描述 RESTful API 的强大定义格式。 Nest 提供了一个专用模块来使用它。
实际上,本人之所以使用nest也是因为nest原生支持Swagger。
我们知道,一个后台api无论是在开发过程中,还是在开发完毕后,如果能有一份文档,而且还能实时测试,那岂不是很好,而Swagger正提供了这样一个功能。
例如
可以看到所有的api都明明白白的,使用起来不要太方便。
关于Swagger的更多用法请自行上网搜索,一抓一大把,用过的都说好。
正因如此,之前在没有发现nest之前写Swagger真的有些痛苦,而nest可以说是进一步简化了这个过程。
总结
总得来讲,nest解决了如下几个问题:
- 模块解耦:我们都知道,当项目越写越大的时候,解耦就成了非常重要的事情了。优秀的解耦可以整个项目便于维护
- 简化了路由挂载:和之前的手动挂载相比,用装饰器来挂载路由真的不要太方便。
- 结合Swagger自动生成文档
- 与typescript结合良好,非常适合大项目,并且也支持纯js
- ……
其实还有很多点,例如结合nestjs-typegoose快速实现restful api的开发,可以说是非常方便了。【也就是nodejs+typescript+nestjs+mongoose】
最后,其实是有nest也还有别的理由。看下图。nest在npm上的下载量一直在上升,可以说处于一个上升期。所以完全有理由期待它后续的表现。
【关于最后一行的下载量骤降,我估计是统计上的bug【应该是因为圣诞节程序员放假了,所以没下载量了】,因为基本上所有的包下载量都跳水了。可以看到去年这个时期下载量也骤降了。】
本文作者:草梅友仁
本文地址: https://blog.cmyr.ltd/archives/69aca6e.html
版权声明:转载请注明出处!