文章目录
- 前提-安装环境
- 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


















![[AutoSar]BSW_Diagnostic_005 RoutineControl service (0x31)介绍](https://i-blog.csdnimg.cn/direct/3e846ae973f64a61844f4ce815e86fa0.png)