前言

最近一直在忙于开发一个自己个人的小项目,前端基于 React + Umi ,后端之前用了两年多 Egg.js,但是感觉对于现在的 TypeScript 支持有限,最后选择了 Nest.js,感觉非常良好,特此在这里记录一下学习过程

Nest.js 是什么?

Nest (NestJS) 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的开发框架。它利用 JavaScript 的渐进增强的能力,使用并完全支持 TypeScript (仍然允许开发者使用纯 JavaScript 进行开发),并结合了 OOP (面向对象编程)、FP (函数式编程)和 FRP (函数响应式编程)

理论知识

Nest.js 是一个 Node.js 的后端框架,它对 expresshttp 平台做了一层封装,解决了架构问题。它提供了 express 没有的 MVCIOCAOP 等架构特性,使得代码更容易维护、扩展。

这里我们要分别了解 MVCIOCAOP 代表的含义:

  1. MVCMVCModel View Controller 的简写。MVC 架构下,请求会先发送给 Controller,由它调度 Model 层的 Service 来完成业务逻辑,然后返回对应的 View
  2. 那什么是 IOC 呢?

Nest.js 提供了 @Controller 装饰器用来声明 Controller

123.jpg

Service 会用 @Injectable 装饰器来声明:

1666163599997.jpg

通过 @Controller@Injectable 装饰器声明的 class 会被 Nest.js 扫描,创建对应的对象并加到一个容器里,这些所有的对象会根据构造器里声明的依赖自动注入,也就是 DI(dependency inject),这种思想叫做 IOC(Inverse Of Control)

  1. AOC:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术

好家伙,听得云里雾里的,在我看来,Nest.js 能帮助我们完成后端服务,底层有点想 Angular ,想了解更多的,可以去看下它的官网 [Nest](https://nestjs.bootcss.com/)

安装

我们可以使用 [Nest CLI][https://nestjs.bootcss.com/cli/overview] 创建项目,也可以克隆一个 starter project(两者的结果是一样的)
这里我们选择用 [Nest CLI][https://nestjs.bootcss.com/cli/overview] 创建项目:

1
2
$ npm i -g @nestjs/cli
$ nest new project-name

其它安装方式

使用 Git 安装采用 TypeScript 开发的 starter 项目:

1
2
3
4
$ git clone https://github.com/nestjs/typescript-starter.git project
$ cd project
$ npm install
$ npm run start

最后打开浏览器并导航到 http://localhost:3000/ 地址。