0%

2019-12-17 nest.js框架初步探究

2019-12-17 nest.js框架初步探究

参考资料:

  1. nest.js
    1. 官网:https://nestjs.com/
    2. github:https://github.com/nestjs/nest
    3. 中文文档:https://docs.nestjs.cn/6/introduction
    4. 视频教程:基于TypeScript的NodeJs框架:NestJs开发博客API (node.js+nest.js)
  2. mongoose
    1. 中文文档:https://mongoosedoc.top/docs/index.html
  3. typegoose
    1. 项目地址:https://github.com/typegoose/typegoose
  4. nestjs+vuejs全栈开发
    1. 视频教程:https://www.bilibili.com/video/av73070499

前言

在接触了一段时间的nestjs之后,我可以说是十分惊喜。

随着express项目的越写越多,本人也感觉到了目前的项目结构有些问题。

虽然是勉强按照routes、controllers、services、middleware等划分实现了初步解耦,但还是存在着很大的耦合,不利于项目的升级和优化。

本人写的项目都还算简单的,可以想象如果是大项目按照这个结构多半会有问题。

下面就来讲述下nest的优势所在

控制器

关于控制器,就是接受应用的特定请求。而使用装饰器能够快速将一个控制器挂载到路由,因此项目结构中直接就少了routes,因为没有任何必要了。

1
2
3
4
5
6
7
8
9
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响应, 看看是哪里出了问题。【可以看出非常优雅】

1
2
3
4
{
"statusCode": 500,
"message": "Internal server error"
}

API文档生成(Swagger)

OpenAPI(Swagger)规范是一种用于描述 RESTful API 的强大定义格式。 Nest 提供了一个专用模块来使用它。

实际上,本人之所以使用nest也是因为nest原生支持Swagger。

我们知道,一个后台api无论是在开发过程中,还是在开发完毕后,如果能有一份文档,而且还能实时测试,那岂不是很好,而Swagger正提供了这样一个功能。

例如

mark

可以看到所有的api都明明白白的,使用起来不要太方便。

关于Swagger的更多用法请自行上网搜索,一抓一大把,用过的都说好。

正因如此,之前在没有发现nest之前写Swagger真的有些痛苦,而nest可以说是进一步简化了这个过程。

总结

总得来讲,nest解决了如下几个问题:

  1. 模块解耦:我们都知道,当项目越写越大的时候,解耦就成了非常重要的事情了。优秀的解耦可以整个项目便于维护
  2. 简化了路由挂载:和之前的手动挂载相比,用装饰器来挂载路由真的不要太方便。
  3. 结合Swagger自动生成文档
  4. 与typescript结合良好,非常适合大项目,并且也支持纯js
  5. ……

其实还有很多点,例如结合nestjs-typegoose快速实现restful api的开发,可以说是非常方便了。【也就是nodejs+typescript+nestjs+mongoose】

最后,其实是有nest也还有别的理由。看下图。nest在npm上的下载量一直在上升,可以说处于一个上升期。所以完全有理由期待它后续的表现。

mark

【关于最后一行的下载量骤降,我估计是统计上的bug【应该是因为圣诞节程序员放假了,所以没下载量了】,因为基本上所有的包下载量都跳水了。可以看到去年这个时期下载量也骤降了。】

mark

本文作者:草梅友仁
本文地址: https://blog.cmyr.ltd/archives/69aca6e.html
版权声明:转载请注明出处!

坚持原创技术分享,您的支持将鼓励我继续创作!