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

文章目录

  • 前提-安装环境
  • 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/889002.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv11训练自己数据集_笔记1

一、前言 yolov11-main 官网 分析YOLO11的关键改进点 YOLO11 相比之前版本&#xff0c;带来了五大关键改进&#xff1a; 增强特征提取&#xff1a;通过改进Backbone和Neck架构&#xff0c;新增了C3k2和C2PSA等组件&#xff0c;提升了目标检测的精度。 优化效率和速度&#xf…

深入理解HTTP Cookie

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 HTTP Cookie定义工作原理分类安全性用途 认识 cookie基本格式实验测试 cookie 当我们登录了B站过后&#xff0c;为什么下次访问B站就…

ctfshow-web 萌新题

给她 spring漏洞 pyload: 1.dirsearch扫描&#xff0c;发现git 2. GitHack工具得到.git文件 <?php $passsprintf("and pass%s",addslashes($_GET[pass])); $sqlsprintf("select * from user where name%s $pass",addslashes($_GET[name])); ?>…

HTML5实现古典音乐网站源码模板1

文章目录 1.设计来源1.1 网站首页1.2 古典音乐界面1.3 著名人物界面1.4 古典乐器界面1.5 历史起源界面2.效果和源码2.1 动态效果2.2 源代码源码下载万套模板,程序开发,在线开发,在线沟通作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/142…

aws(学习笔记第一课) AWS CLI,创建ec2 server以及drawio进行aws画图

aws(学习笔记第一课) 使用AWS CLI 学习内容&#xff1a; 使用AWS CLI配置密钥对创建ec2 server使用drawio&#xff08;vscode插件&#xff09;进行AWS的画图 1. 使用AWS CLI 注册AWS账号 AWS是通用的云计算平台&#xff0c;可以提供ec2&#xff0c;vpc&#xff0c;SNS以及clo…

无人机之飞控仿真技术篇

一、无人机飞控仿真技术的定义 无人机飞控仿真技术主要是指飞行控制系统仿真&#xff0c;它是以无人机的运动情况为研究对象&#xff0c;面向对象的复杂系统仿真。通过该技术&#xff0c;可以模拟无人机的飞行过程&#xff0c;评估飞行控制系统的性能&#xff0c;优化飞行参数&…

【Linux:线程控制】

目录 线程的创建与等待&#xff1a; ​编辑 代码中tid是什么&#xff1f; 如何看待线程函数传参&#xff1f; ​编辑 ​编辑创建多线程&#xff1a;​编辑 终止多线程&#xff1a; 线程分离&#xff1a; 线程封装&#xff1a; 线程的创建与等待&#xff1a; void *thre…

leetcode125:验证回文串

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回 true &#xff1b;否则&#…

华为OD机试 - 贪吃蛇 - 队列(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

计算机网络:数据链路层 —— 数据链路层概述

文章目录 数据链路层主要功能 基本概念链路数据链路帧 数据链路层 在计算机网络中&#xff0c;链路层&#xff08;Data Link Layer&#xff09;是网络协议栈中的一层&#xff0c;负责管理和控制链路的建立、维护和释放&#xff0c;以及处理链路层的数据帧传输和错误控制等功能…

Linux入门3——vim的简单使用

1.vim 1.1 vim的模式 vim有三种主要模式&#xff1a; ①命令模式&#xff1a;使用vim刚打开进入的模式就是命令模式&#xff1b; ②插入模式&#xff1a;只有在插入模式下才可以做文字输入&#xff0c;按[Esc]键可退回命令模式&#xff1b; ③末行模式&#xff1a;文件保存或退…

大数据毕业设计选题推荐-王者荣耀战队数据分析-Python数据可视化-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

Go基础学习11-测试工具gomock和monkey的使用

文章目录 基础回顾MockMock是什么安装gomockMock使用1. 创建user.go源文件2. 使用mockgen生成对应的Mock文件3. 使用mockgen命令生成后在对应包mock下可以查看生成的mock文件4. 编写测试代码5. 运行代码并查看输出 GomonkeyGomonkey优势安装使用对函数进行monkey对结构体中方法…

Android SELinux——安全策略(三)

SELinux 通过严格的访问控制机制增强了 Linux 系统的安全性。它通过标签和安全策略来控制进程和文件的访问权限&#xff0c;从而保护系统免受未经授权的访问和攻击。 一、策略介绍 1、主要组件 安全标签&#xff08;Security Labels&#xff09;&#xff1a;每个文件、目录、…

vite学习教程02、vite+vue2配置环境变量

文章目录 前言1、安装依赖2、配置环境变量3、应用环境变量4、运行和构建项目资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝3W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容&#xff1…

Python的pandas库基本操作(数据分析)

一、安装&#xff0c;导入 1、安装 使用包管理器安装&#xff1a; pip3 install pandas 2、导入 import pandas as pd as是为了方便引用起的别名 二、DateFrame 在Pandas库中&#xff0c;DataFrame 是一种非常重要的数据结构&#xff0c;它提供了一种灵活的方式来存储和…

typora笔记导出word格式:

Pandoc&#xff1a;各系统下载github链接 https://github.com/jgm/pandoc/releases/latest windows安装包 链接&#xff1a;https://pan.baidu.com/s/17AZNIMImbzFtWJAcAfAB0g?pwd55l2 提取码&#xff1a;55l2 先解压压缩包 点击 设置Pandoc路径&#xff0c;然后选择pa…

【Sceneform-EQR】(手势优化)通过手势事件实现在AR/VR等三维场景中的控制模型旋转、平移与缩放

在上一篇文档中&#xff0c;我们实现了通过手势控制模型节点的旋转、缩放和平移。现在本文将介绍如何优化上一篇做的手势控制器&#xff0c;从而实现更好的跟手效果。 相关链接&#xff1a;【Sceneform-EQR】&#xff08;手势控制器实现&#xff09;通过手势事件实现在AR/VR等…

FiBiNET模型实现推荐算法

1. 项目简介 A031-FiBiNET模型项目是一个基于深度学习的推荐系统算法实现&#xff0c;旨在提升推荐系统的性能和精度。该项目的背景源于当今互联网平台中&#xff0c;推荐算法在电商、社交、内容分发等领域的广泛应用。推荐系统通过分析用户的历史行为和兴趣偏好&#xff0c;预…

Linux平台Kafka高可用集群部署全攻略

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《大数据前沿&#xff1a;技术与应用并进》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Kafka简介 2、Kafka核心优势 二、环境准备 1…