听说最近Nest.js越来越火了,咱也是第一次接触Nest框架,通过几天的学习,本篇文章就使用Nest自己实现一些简单的后端接口
概念
Nest (NestJS) 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的开发框架。它利用 JavaScript 的渐进增强的能力,使用并完全支持 TypeScript (仍然允许开发者使用纯 JavaScript 进行开发),并结合了 OOP (面向对象编程)、FP (函数式编程)和 FRP (函数响应式编程)。 在底层,Nest 构建在强大的 HTTP 服务器框架上,例如 Express (默认),并且还可 以通过配置从而使用 Fastify ! Nest 在这些常见的 Node.js 框架 (Express/Fastify) 之上提高了一 个抽象级别,但仍然向开发者直接暴露了底层框架的 API。这使得开发者可以自由地使用适用于底层平台的无数的第三方模块。
安装和初始化
首先确定你已经安装了 Node.js 并且版本大于16, Nest.js 应用程序,请在终端上运行以下命令:
pnpm i -g @nestjs/cli // 全局安装Nest
nest new project-name // 创建项目
执行完创建项目, 会初始化下面这些文件, 并且询问你要是有什么方式来管理依赖包:
自己有什么就用什么就行了,当然目前最推荐的还是速度最快的pnpm
创建完成后先将目录跳转到创建好的根目录中就可以使用nest start 运行项目,或者nest start --watch 可以自动重启项目
进入浏览器在网址中输入localhost:3000 就可以看到我们项目的页面了
3000端口是默认的,我们可以在main.ts文件中自行修改
Nest文件结构
命令执行后会生成如下的文件结构:
概述一下各个文件的功能:
文件 | 说明 |
---|---|
app.controller.ts | 单个路由的基本控制器(Controller) |
app.controller.spec.ts | 针对控制器的单元测试 |
app.module.ts | 应用程序的根模块(Module) |
app.service.ts | 具有单一方法的基本服务(Service) |
main.ts | 应用程序的入口文件,它使用核心函数 NestFactory 来创建 Nest 应用 程序的实例。 |
app.module.ts是应用程序的根模块,根模块提供了用来启动应用的引导机制,可以包含很多功能模块。 .module文件需要使用一个@Module() 装饰器的类,装饰器可以理解成一个封装好的函数,其实是一 个语法糖。
常用装饰器:
@Controller:如每一个要成为控制器的类,都需要借助 @Controller 装饰器的装饰,该装饰器可以传入一个路径参数,作为访问这个控制器的主路径:
@Get、@Post、@Put、@Delete:用于HTTP方法处理装饰器,经过它们装饰的方法,可以对相应的 HTTP请求进行响应。同时它们可以接受一个字符串或一个字符串数组作为参数,这里的字符串可以是固定的路径,也可以是通配符。
@Module() 装饰器接收四个属性:providers、controllers、imports、exports。
了解完Nest的基本结构和概念后,我们就可以连接数据库了
连接数据库
NestJS连接数据库我选择的是MySql,首先先安装@nestjs/typeorm 、 typeorm 、 mysql2:
pnpm install @nestjs/typeorm typeorm mysql2 -S
连接数据库需要你本地安装mysql数据库,这里选择的是phpstudy小皮
然后安装vscode的数据库插件: Database Client
安装完成后点击加号连接数据库,输入名称和密码即可(密码一般默认也是root)
连接后,点击数据库上的加号新建数据库,输入数据库名,点击三角运行按钮即可
如果数据库没有显示可以点击漏斗图标进行筛选
下一步开始连接mysql,进入 app.module.ts 中进行数据库连接的配置
synchronize:是否自动同步实体到数据库,如果已经有对应的表了就要慎用这个方法了,可能会改变已有的表的属性
实体这个词大家也许会觉得陌生,接着往下看👇
使用 nest g res user生成用户模块,
nest g res user
在 user.entity.ts 文件里面添加实体,实体是一个映射到数据库表的类。 换句话说实体就是一张数据表,在typeorm中我们不需要对数据库的表使用相 关工具进行创建与关联,而只需要创建一个实体,并且将实体中的数据内容设置好,那么在项目启动后,如果没有那个表,就会自动生成对应的表,并且将表与表之间的关系给创建好。
然后去user.module.ts文件中,将 User 实体注册到 TypeORM 中
forFeature():注册的每个实体都自动加载
然后重新启动项目,不出意外的话就可以成功添加一个user表了
插入和查询数据
先安装依赖 pnpm i typeorm
pnpm i typeorm
在user.servise.ts中添加以下代码
引入代码可以先不用管,不引入直接用按回车键的时候编辑器会自动引入
然后去user.controller.ts文件中查看对应的请求方式:
打开请求调试工具(这里用的是插件postcode)进行接口调试,调用添加的接口,传入两个参数username 和 password
这样就添加成功了,我们可以在表中看到这条数据
添加完几条数据后,我们还可以用查询的接口来查看表的数据
那么到这里我们就已经通过Nest实现一些最基本的接口了,我们也可以进一步在控制器和服务器文件中做一些其他的处理,那之后我们可以结合自己的前端代码发送不同的请求获取对应的数据
Nest.js作为一个逐渐流行的框架,学会Nest.js不仅可以帮助我们构建更好的应用程序,还可以提升我们的技术栈,为未来的职业发展打下坚实的基础。