- 博客(59)
- 收藏
- 关注
原创 nestjs 全栈进阶--装饰器
前面我们讲过,属性注入要指定注入的 token,可能是 class 也可能是 string,你还可以通过 useFactory、useValue 等方式声明 provider,这里不再演示。如果模块被很多地方都引用,为了方便,可以用 @Global 把它声明为全局的,这样它 exports 的 provider 就可以直接注入了。我们保存时候,你会发现,这个是不会报错的,当然,如果你在浏览器中访问,他会报错,因为我们无法从undefined中获得getHello这个方法。这些在参数获取时,我们也讲过了。
2024-04-26 16:18:48 353
原创 vue和react通用后台管理系统权限控制方案
在任何企业级应用中,尤其是后台管理系统,权限控制是一个至关重要的环节。它确保了系统资源的安全性,防止非法访问和操作,保障业务流程的正常进行。本文件将详细解析后台管理系统中的权限控制机制及其实施策略。那么权限控制都包括什么呢?页面权限:菜单栏是否显示,路由是否可访问功能权限:按钮是否显示,是否可点击接口权限:接口是否可访问(后端内容)不同的账号显示的菜单栏不同,页面上可以操作的按钮也不一样,这些操作都是通过权限模型实现的,那么接下来我们就来学习下常见的权限模型。
2024-04-12 16:55:03 1116
原创 nestjs 全栈进阶--aop面向切面编程
面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,其核心理念在于将交叉-cutting concerns(横切关注点)从主业务逻辑中抽离出来,以便于管理和重用。这些横切关注点通常包括日志记录、事务管理、安全检查、性能监控等,它们贯穿于整个系统,可能会影响到多个类或多个方法
2024-04-12 09:27:55 646
原创 nestjs 全栈进阶--nest生命周期
所有应用程序元素都有一个由 Nest 管理的生命周期。Nest 提供了生命周期钩子,提供了对关键生命时刻的可见性,以及在关键时刻发生时采取行动(在你的module,injectable或者controller中注册代码)的能力
2024-04-09 14:02:06 521
原创 nestjs 全栈进阶--module
在 Nest.js 中,Module 是框架的核心概念之一,用于组织和管理应用程序的不同部分,包括服务、控制器、中间件以及其他模块的导入。每个 Nest.js 应用程序至少有一个根模块(通常命名为 AppModule),并且可以根据需要创建更多的模块以实现更好的代码组织和模块化。
2024-04-07 11:21:39 798
原创 nestjs 全栈进阶--provider
在 Nest.js 框架中,Providers 是一个核心概念,用于定义和管理应用中的服务、数据库连接、中间件、门面(facade)、仓库(repository)、工厂(factory)、帮助器(helper)等可注入的依赖。Providers 是 Nest.js 实现依赖注入(Dependency Injection, DI)体系的基础单元,它们可以被其他组件通过构造函数、属性注入等方式依赖,并由 Nest.js 的依赖注入容器自动管理和实例化。第一种用法就是一个语法糖其实他的完整写法是这样的。
2024-04-04 15:07:54 1046
原创 nestjs 全栈进阶--控制器和参数获取
Nest,使用 @Body 装饰器,Nest 会解析请求体,然后注入到 dto 中(dto 是 data transfer object,就是用于封装传输的数据的对象)@Controller('person') 的路由和 @Get(':id') 的路由会拼到一起,也就是只有 /person/xxx 的 get 请求才会走到这个方法。注意,这个 find 的路由要放到 :id 的路由前面,因为 Nest 是从上往下匹配的,如果放在后面,那就匹配到 :id 的路由了。后面的用 & 分隔的字符串传递数据。
2024-04-03 11:13:43 545
原创 nestjs 全栈进阶-装饰器概念
装饰器是一种特殊类型的声明,可以被附加到类声明、方法、访问器、属性或参数上。装饰器使用 @expression 这样的语法,其中 expression 指向一个生成装饰器函数的表达式。装饰器函数会在运行时被调用,传入被装饰的声明作为参数,并有机会修改或增强其行为console.log('先打印');class Xt {@logconsole.log(`${prefix}先打印`);
2024-04-02 09:56:05 267
原创 IOC与DI
当执行start的时候 main.ts的内容就会被执行,那么 nest 就会从 AppModule 开始解析 class 上通过装饰器声明的依赖信息,自动创建和组装对象。我们可以看到在app.service,他声明了 @Injectable,代表这个 class 可注入,那么 nest 就会把它的对象放到 IOC 容器里。在之前我们说到过,app.module中是不是已经引用了user.module了,那么他现在他就可以注入exports 的 UserService 了。中代码的实现是需要依赖。
2024-04-01 16:08:48 695
原创 Nest cli
项目开发离不开工程化的部分,比如创建项目、编译构建、开发时 watch 文件变动自动构建等。Nest它在 @nestjs/cli 这个包里提供了 nest 命令。
2024-04-01 10:26:58 764
原创 React18 后台管理模板项目:现代、高效与灵活
🎉 给大家推荐一款React18+Typescript+Vite+zustand+Antd+unocss且超级好用的中后台管理框架。
2024-03-15 21:21:52 952
原创 运算符总结
其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。逻辑 NOT 运算符。检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。检查左边值是否大于右边值,如果是返回 True 否则返回 False。检查左边值是否小于右边值,如果是返回 True 否则返回 False。
2023-11-03 14:11:08 158
原创 字符串的常用操作
返回子串substr在字符串s中最后一次出现的索引位置,如果未找到则返回-1。返回子串substr在字符串s中第一次出现的索引位置,如果未找到则返回-1。在字符串s中将old替换为new,替换次数为n,如果n为-1则替换所有。根据空白字符(空格、制表符、换行符等)将字符串s拆分为一个字符串数组。将字符串s转换为小写形式,并根据指定的地区locale进行特殊处理。判断字符串s是否包含子串substr,返回布尔值。将字符串s重复count次,返回一个新的字符串。返回字符串s中子串substr出现的次数。
2023-11-03 14:03:45 164
原创 go语言基础之基本数据类型
定义: 位、字节和字都是描述计算机数据单元或储存单元的术语,一般指储存单元位(bit)是最小的储存单元,可储存0或1,是计算机内存的基本构建块字节(byte)是常用的计算机储存单位,1字节=8位,8位就有256(2的8次方)种0、1的组合,即可0~255的整数或一组字符字(word)是设计计算机时给定的自然储存单位,不同的电脑字长可能不同,对于8位的微型计算机,字长就是8位,32位计算机,1字=32位=4字节,64位计算机,1字=64位=8字节,现在的个人计算机通常都是64位,即1字=64位。
2023-10-13 17:27:55 288
原创 Windows上安装 Go 环境
下面这个是配置代理,当然你也可以用其他的,他默认的是GOPROXY=https://proxy.golang.org,direct 这个在国内很慢,所以我们要重新设置下,我这设置的是七牛云的,你也可以设置其他的。这个一直下一步就行。
2023-09-28 15:33:54 394
原创 常见js面试题--手写call,apply,bind
手写简易call,apply,bind面试中可能会让你手写写这几个函数,但是他们的内部实现其实是C++代码,所以我们这里只是用js实现简易版的,不会过多的考虑边界情况,当然,应对面试,肯定是够用了。一、call函数实现对于这个我就一步一步的给大家分析(后面的apply和bind就不在一步步地分析了)1.在Function的原型上挂载我们自己的call函数Function.prototype.xtCall = function() { console.log(111);}functio
2022-06-01 21:50:20 138
原创 JavaScript进阶讲解十八—>await-async-eventloop
异步函数async关键字用于声明一个异步函数async function foo() { }const foo1 = async function() { }const foo2 = async () => { }class Foo3 { async foo() { }}异步函数的执行流程async function foo() { console.log('foo start'); console.log(1)
2022-05-29 22:03:32 301
原创 JavaScript进阶讲解十七—>迭代器与生成器
迭代器(iterator)迭代器(iterator),是确使用户可在容器对象(container,例如链表或数组)上遍访的对象,使用该接口无需关心对象的内部实现细节。迭代器是帮助我们对某个数据结构进行遍历的对象在JavaScript中,迭代器也是一个具体的对象,这个对象需要符合迭代器协议(iterator protocol):迭代器协议定义了产生一系列值(无论是有限还是无限个)的标准方式在js中这个标准就是一个特定的next方法next方法有如下的要求:一个无参数或者一个参数的函数(如
2022-05-29 18:22:41 172
原创 JavaScript进阶讲解十六—>Promise
Promise三个状态pending: 初始状态,既没有被兑现,也没有被拒绝(当执行executor中的代码时,处于该状态)fulfilled:操作成功完成(执行了resolve时,处于该状态)rejected:操作失败(执行了reject时,处于该状态)function requestData(url) { return new Promise((resolve, reject) => { if (url === '123') { reso
2022-05-29 00:38:52 213
原创 JavaScript进阶讲解十五—>实现响应式
响应式可以自动响应数据变量的代码机制,我们就称之为是响应式。如:当有一个值发生了变化,引用了这个值的地方会自动重新执行响应式的实现我们已经知道了其原理,那么我们如何实现对象的响应式呢?我们看看我们需要做什么?对象的属性发生变化时,我们需要将要做响应式的代码,重新执行。我们先来分析步骤。我们我们需要实现一个响应式函数(他接收需要响应式的函数)响应式依赖收集(第一反应就是用数组管理,但数组又太难管理,所以可以用类)监听对象的变化(Object.defineProperty或者用proxy)当
2022-05-28 19:05:33 1864
原创 JavaScript进阶讲解十四—>Proxy-Reflect
监听对象的操作在之前我们已将讲过一种方式(Object.defineProperty)通过它的存取属性描述符,我们就可以实现对对象属性的监听。const obj = { name: 'xt', age: 18}Object.keys(obj).forEach(key => { let val = obj[key] Object.defineProperty(obj, key, { get: function() { c
2022-05-28 14:21:00 180
原创 JavaScript进阶讲解十三—>es6~es12(三)
Includes(es7)判断一个数组或者字符串中是否包含某个元素,包含则返回 true,否则返回false。(在es7之前,可以用indexOf判断,不存在返回-1)const arr = ['a', 'b', 'c']console.log(arr.includes('a')); // trueconsole.log(arr.includes('d')); // falseconst str = 'abc'console.log(str.includes('a')); // truec
2022-05-27 22:09:11 214
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人