文章目录
- 前提-安装环境
- Nestjs框架
-
- 介绍
- Nestjs框架环境搭建
- 创建nestjs项目
- 运行nestjs项目demo
- nestjs新项目结构解释
- nestjs中的控制器、路由、Get、Post、方法参数装饰器
- nestjs模板引擎、配置静态资源(了解即可)
- nestjs中的服务(Model)
- nestjs中的cookie(了解即可)
- nestjs中的session详解
- nestjs文件上传、单个文件上传,多个文件上传
- nestjs中的中间件详解
- nestjs中管道详解
- nestjs中的模块
- nestjs守卫 以及基于session的权限判断
- nestjs结合mongodb(了解即可)
- RBAC实现流程
前提-安装环境
建议使用NVM来管理nodejs版本
Windows下载地址:https://github.com/coreybutler/nvm-windows/releases
检查是否安装成功
打开命令提示符窗口输入
# 查看nvm版本
nvm -v
nvm 常用命令
# 查看已经安装的版本
nvm list
# 选择自己需要的版本进行安装
nvm install <version>
# 要先安装好的版本,才能进行使用,选择自己想使用的版本
nvm use [version]
# 查看nvm其它命令使用解释
nvm --help
Nestjs框架
介绍
官网
https://nestjs.com/
Nestjs框架环境搭建
前面已经使用nvm安装好了nodejs,也自带了npm
使用npm 安装nestjs脚手架工具
npm i -g @nestjs/cli
创建nestjs项目
使用如下命令
nest new <项目名称>
注意:使用以上命令可能会报错禁止允许nest脚本,以管理员身份运行powershell
输入 set-ExecutionPolicy RemoteSigned命令,有选项,输入Y
创建好后,需要进入该项目名文件夹,cd 项目名称
运行nestjs项目demo
# 安装依赖
npm i
# 启动项目
npm run start
# 启动开发环境,有自动热部署,改动保存后,会自动重新加载项目
npm run start:dev
在浏览器输入localhost:3000, 可以看到Hello World!代表启动成功
nestjs新项目结构解释
主要看package.json文件和src文件夹里面的文件,main.js是入口
nestjs中的控制器、路由、Get、Post、方法参数装饰器
通过命令创建controller
前提:要安装nest-cli
# nest g controller user 在src下创建
nest g controller <控制器名称>
# 在指定目录下创建控制器 nest g controller user/login
nest g controller <文件夹名称>/<控制器名称>
案例代码
import {
Body, Controller, Get, Param, Post, Query, Request } from '@nestjs/common';
/**
* Controller是类装饰器,用来定义一个控制器,
* Get,Post是路由装饰器,用来定义一个路由,
* Query是参数装饰器,用来获取参数
* Request是参数装饰器,用来获取请求对象
* Body是参数装饰器,用来获取请求体
* Param是参数装饰器,用来获取动态路由参数
*/
@Controller('user')
export class UserController {
constructor() {
}
@Get()
async findAll() {
return 'find all users';
}
// 通过@Query()装饰器获取参数
@Get('add')
async add(@Query() query) {
console.log(query);
return query;
}
// 通过@Request()装饰器获取参数
@Get('delete')
async delete(@Request() req) {
console.log(req.query);
return req.query;
}
// 通过@Body()装饰器获取参数
@Post('update')
async update(@Body() data) {
console.log(data);
return data;
}
// 查询单个用户,动态路由
@Get('find/:id')
async findOne(@Param('id') id: number) {
console.log(id);
return id;
}
}
使用nest自带测试功能进行测试以上路由,或使用postman等工具进行测试
npm run test -t 'src/user/user.controller.spec.ts'
在运行测试命令前,需要在编写以下代码
import {
Test, TestingModule } from '@nestjs/testing';
import {
UserController } from './user.controller';
describe('UserController', () => {
// 定义一个控制器变量
let controller: UserController;
// 在每个测试之前执行一次的钩子函数
beforeEach(async () => {
// 创建一个测试模块
const module: TestingModule = await Test.createTestingModule({
// 注册测试模块的控制器
controllers: [UserController],
}).compile();
// 从模块中获取UserController实例
controller = module.get<UserController>(UserController);
});
// 测试controller是否被正确定义
it('should be defined', () => {
// 验证controller是否存在
expect(controller).toBeDefined();
});
// 测试findAll方法
describe('findAll method', () => {
// 测试findAll方法是否返回正确的字符串
it('should return "find all users"', async () => {
const result = await controller.findAll();
expect(result).toBe('find all users');
});
});
// 测试add方法
describe('add method', () => {
// 测试add方法是否返回正确的查询参数
it('should return query params', async () => {
const query = {
name: 'outman', age: 18 };
const result = await controller.add(query);
expect(result).toEqual(query);
});
});
// 测试delete方法
describe('delete method', () => {
// 测试delete方法是否返回正确的请求查询参数
it('should return request query', async () => {
const req = {
query: {
id: 5, name: 'outman', age: 18 } };
const result = await controller.delete(req);
expect(result).toEqual(req.query);
});
});
// 测试update方法
describe('update method', () => {
// 测试update方法是否返回正确的请求参数
it('should return request body', async () => {
const req = {
body: {
id: 1234, name: 'outman', age: 18 } };
const result = await controller.update(req);
expect(result.body).toEqual(req.body);
});
});
// 测试findOne方法
describe('findOne method