Nodejs-Nestjs框架 RBAC(基于角色的访问控制模型) 微服务 仿小米商城实战视频教程-2024年-试看学习记录

前提-安装环境

建议使用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值