参考资料:
- Nest.js
- mongoose
- typegoose
- nestjs+vuejs 全栈开发
前言
在接触了一段时间的 nestjs 之后,我可以说是十分惊喜。
随着 express 项目的越写越多,本人也感觉到了目前的项目结构有些问题。
虽然是勉强按照 routes、controllers、services、middleware 等划分实现了初步解耦,但还是存在着很大的耦合,不利于项目的升级和优化。
本人写的项目都还算简单的,可以想象如果是大项目按照这个结构多半会有问题。
下面就来讲述下 nest 的优势所在
控制器
关于控制器,就是接受应用的特定请求。而使用装饰器能够快速将一个控制器挂载到路由,因此项目结构中直接就少了 routes,因为没有任何必要了。
import { Controller, Get } from '@nestjs/common';
@Controller('cats')//将该类声明为路由,并添加 cats前缀
export class CatsController {
@Get()
findAll(): string {
return 'This action returns all cats';
}
}
提供者
主要提下 service。简单的说就是把复杂的逻辑放到 service 中,确保控制器中只有简单的响应逻辑。
模块
模块(Module)是 nest 项目解耦的核心保障。正是通过 Module 来组织项目,划分逻辑,确保各个模块的独立性,降低耦合性。
异常过滤器
在后台开发中也经常会遇到这样的问题,例如未捕获的异常导致 pm2 进程重启。对于后台开发者来讲,虽然有 pm2 这样的进程守护,但显然要关心一下未捕获的异常。而 nest 提供了全局的异常捕获机制,对于非 HttpException 的异常也能优雅的返回个 500 响应,如果是 HttpException 则和一般的响应一致。不会出现后台崩了前端一直没有响应的问题。而后台开发者也就只需要关心下 500 响应, 看看是哪里出了问题。【可以看出非常优雅】
{
"statusCode": 500,
"message": "Internal server error"
}
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://wp.cmyr.ltd/archives/preliminary-exploration-of-nest-js-framework
- 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
欢迎关注我的其它发布渠道
发表回复
要发表评论,您必须先登录。