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 // 创建项目
这里会询问用哪种方式来管理依赖包
3. 项目结构
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/ 界面如下
打开项目入口文件src/main.ts
使用了nestjs
提供的NestFactory
工厂函数来创建一个AppModule
实例, 启动HTTP服务监听3000端口
接着看AppModule
模块代码(main.ts里引入)
可以看到,这里使用了@Module()
装饰器, 不熟悉TS 装饰器的,可以先去查下资料学习下。
看下装饰器接收的三个属性
- imports: 使用其他模块的服务,在这里导入
- controllers: 导入控制器,处理http请求,路由控制
- providers: 导入服务(service), 处理业务逻辑
接着看AppController
模块
引入了@Controller
和@Get
两个装饰器,
- @Controller: 定义控制器
- @Get:http请求的声明方法
这里调用了this.appService.getHello()
,看下AppService
模块
看到这里,接口接口的内容Hello World!
,就清楚了。
接下来,我们利用CLI
工具提供的能力,快速创建一个CURD
模块
运行nest g resource user
自动创建了以下文件
打开src/app.module.ts
, 发现在根模块自动引入了UserModule
这里介绍下src/user/dto/create-user.dto.ts
和src/user/entities/user.entity.ts
,其它文件类型上面介绍过了
user.entity.ts
: 创建实体,通过实体映射到数据库表
这里typeorm
是Node.js
中的 ORM
框架,接口定义、代码实现等都很简单易懂、可读性高,对接数据源方便。(下一遍文章讲接入数据库时,会详细讲解)
ORM
框架是为了解决面向对象与关系数据库存在的互不匹配的现象,把面向 SQL
开发转变为面向对象开发,开发不需要关注底层实现细节,可以以操作对象的模式使用数据库。
create-user.dto.ts
: 进行类型说明
启动服务npm run start
访问一下路由
返回src/user/user.service.ts
对应的逻辑
5. 总结
到这里,就初步认识了Nest.js
, 下一遍讲解怎么接入数据库