初识Nest.js(文章一)

79 阅读3分钟

1. 介绍

1.1 定义

用于构建高效、可靠和可扩展的服务器端应用程序的渐进式 Node.js 框架。(来自官方介绍)

在底层,Nest.js 构建在强大的 HTTP 服务器框架上(Express)(默认),也可以通过配置使用其它框架,比如(Fastify 等)。 支持使用TypeScript开发

2. 创建项目

2.1 Nest CLI

NestJs的CLI工具-- @nestjs/cli

npm i -g @nestjs/cli // 全局安装Nest 
nest new project-name // 创建项目

截屏2022-09-03 上午11.54.14.png

这里会询问用哪种方式来管理依赖包

3. 项目结构

截屏2022-09-03 下午12.08.18.png

3.1 核心文件说明

src
├── app.controller.spec.ts
├── app.controller.ts 
├── app.module.ts
├── app.service.ts
├── main.ts
  • app.controller.ts 路由的基本控制器, 一般用来处理 http 请求以及调用 service 层的处理方法
  • app.controller.spec.ts 控制器的单元测试
  • app.module.ts 程序的根模块, 一般用于处理其他类的引用与共享
  • app.service.ts 基本服务, 用于封装业务逻辑、与数据层的交互(例如数据库)等
  • main.ts 程序的入口文件,使用核心函数 NestFactory 来创建 Nest 应用程序的实例。

4. 编写接口

在编写接口之前,先看下创建项目默认提供的一个接口例子

根目录运行

npm run start

打开http://localhost:3000/ 界面如下

截屏2022-09-03 下午5.46.21.png

打开项目入口文件src/main.ts

截屏2022-09-03 下午5.48.41.png

使用了nestjs提供的NestFactory工厂函数来创建一个AppModule实例, 启动HTTP服务监听3000端口

接着看AppModule模块代码(main.ts里引入)

截屏2022-09-03 下午5.56.50.png

可以看到,这里使用了@Module()装饰器, 不熟悉TS 装饰器的,可以先去查下资料学习下。

看下装饰器接收的三个属性

  • imports: 使用其他模块的服务,在这里导入
  • controllers: 导入控制器,处理http请求,路由控制
  • providers: 导入服务(service), 处理业务逻辑

接着看AppController模块

截屏2022-09-03 下午6.10.02.png

引入了@Controller@Get两个装饰器,

  • @Controller: 定义控制器
  • @Get:http请求的声明方法

这里调用了this.appService.getHello(),看下AppService模块

截屏2022-09-03 下午6.16.50.png

看到这里,接口接口的内容Hello World!,就清楚了。

接下来,我们利用CLI工具提供的能力,快速创建一个CURD模块

运行nest g resource user

自动创建了以下文件

截屏2022-09-03 下午6.22.50.png

打开src/app.module.ts, 发现在根模块自动引入了UserModule

截屏2022-09-03 下午6.34.06.png

这里介绍下src/user/dto/create-user.dto.tssrc/user/entities/user.entity.ts,其它文件类型上面介绍过了

  • user.entity.ts: 创建实体,通过实体映射到数据库表

截屏2022-09-03 下午6.57.34.png

这里typeormNode.js 中的 ORM 框架,接口定义、代码实现等都很简单易懂、可读性高,对接数据源方便。(下一遍文章讲接入数据库时,会详细讲解)

ORM 框架是为了解决面向对象与关系数据库存在的互不匹配的现象,把面向 SQL 开发转变为面向对象开发,开发不需要关注底层实现细节,可以以操作对象的模式使用数据库。

  • create-user.dto.ts: 进行类型说明

截屏2022-09-03 下午6.55.40.png

启动服务npm run start

访问一下路由

截屏2022-09-03 下午7.08.52.png

返回src/user/user.service.ts对应的逻辑

截屏2022-09-03 下午7.10.32.png

5. 总结

到这里,就初步认识了Nest.js, 下一遍讲解怎么接入数据库