第二步:创建写接口的模块,建立moogodb数据库连接,写添加与查询接口
1.介绍Nest.js
Nest 是一个用于构建高效,可扩展的 Node.js 服务器端应用程序的框架。它使用渐进式 JavaScript,内置并完全支持 TypeScript(但仍然允许开发人员使用纯 JavaScript 编写代码)并结合了 OOP(面向对象编程),FP(函数式编程)和 FRP(函数式响应编程)的元素。
在底层,Nest使用强大的 HTTP Server 框架,如 Express(默认)和 Fastify。Nest 在这些框架之上提供了一定程度的抽象,同时也将其 API 直接暴露给开发人员。这样可以轻松使用每个平台的无数第三方模块。
我自己尝试写过一个完整的项目,虽然只有权限控制跟删查改写,但基本功能还是有的,使用的是
moogodb
,同时有跟我写的Nest项目配套的前端项目可以更直观的去体验功能与调试。
2.安装Nest CLI
npm i -g @nestjs/cli // 全局安装脚手架
nest new project-name // 创建一个基础的Nest.js项目
npm run start:dev // Nest.js 启动命令
- 将会创建 project-name 目录, 安装 node_modules 和一些其他样板文件,并将创建一个 src 目录,目录中包含几个核心文件。
src
├── app.controller.spec.ts
├── app.controller.ts
├── app.module.ts
├── app.service.ts
└── main.ts
- 以下是这些核心文件的简要概述:
app.controller.ts 带有单个路由的基本控制器示例。
app.controller.spec.ts 对于基本控制器的单元测试样例
app.module.ts 应用程序的根模块。
app.service.ts 带有单个方法的基本服务
main.ts 应用程序入口文件。它使用 NestFactory 用来创建 Nest 应用实例。
3.创建子模块
-
一般app开头的模块期望是去用作管理所有子模块
此时需要创建一个模块与控制器:
模块可以理解成一个集中控制的区域。
控制器负责处理传入的请求和向客户端返回响应。
3.1创建模块与控制器
// 创建模块
nest g module 模块名称
// 创建控制器
nest g controller 控制器名称
- **当然有更简洁的命令,在终端输入
nest -h
** - 然后就可以看到有很多命令跟简化版,此时就可以试试简化版
// 创建模块 cat 自己定义的名字
nest g mo cat
// 创建控制器 cat 自己定义的名字
nest g co cat
- 此时就可以在主模块
app.module.ts
里看到子模块控制器CatController
自动被挂载到了主模块上,是不是感觉很像Vue的App入口文件,此时主模块的代码是这样的:
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CatController } from './cat/cat.controller';
import { CatModule } from './cat/cat.module';
@Module({
imports: [CatModule],
controllers: [AppController, CatController],
providers: [AppService],
})
export class AppModule {}
4.体验Nest.js的接口调用
4.1调用接口(依赖注入方式)
-
可以在
app.controller.ts
文件里明确的看到有一个写好的接口,左边为接口定义,右边为响应的数据,采用的依赖注入的方式写入的,此时看main.ts
文件可以看到端口跑在3000上,此时用postman
调用下试试,接口响应了定义的返回值
4.2调用接口(不用依赖注入)
-
可能刚开始还不太了解依赖注入或者觉得这样写太麻烦,那就给改造下
- 更过测试,接口返回值还是没变化,证明改造没问题
5.Nest.js具体描述
- Nest 旨在成为一个与平台无关的框架。 由于平台无关性,我们以创建可重用的逻辑组件,开发人员可以跨越多种不同类型的应用程序来使用这些组件。 从技术上讲,创建了适配器以后,Nest 可以与任何 node.js 的 HTTP 框架一起工作。如果你有express基础,那么Nest.js完全兼容
- Nest.js主要使用装饰器,如果你用了解
SpringBoot
会发现这种写法更偏向于Java
- Nest.js会暴露很多固定的
API
,很多时候并不需要关心具体逻辑,就能快速上手,只需调用固定的API
就可以实现想要的功能 - Nest.js的各种连接主要是使用的依赖注入,是这样描述的:
依赖注入(Providers
) 是 Nest 的一个基本概念。许多基本的 Nest 类可能被视为provider - service
,repository
,factory
,helper
等等。 他们都可以通过constructor
注入依赖关系。 这意味着对象可以彼此创建各种关系,并且“连接”对象实例的功能在很大程度上可以委托给 Nest运行时系统。Provider
只是一个用@Injectable()
装饰器注释的类。