- 博客(60)
- 收藏
- 关注
原创 Node.js的http模块
Node.js的http模块基于Node.js的异步非阻塞I/O模型,使得构建高性能的Web服务器成为可能。和(以及用于处理响应)。:用于创建HTTP服务器,监听HTTP请求,并对这些请求做出响应。和:用于处理HTTP客户端请求和响应。
2024-08-02 09:50:02
456
原创 Node.js中的zlib模块
zlib模块是Node.js的内置模块,它提供了基于Gzip、Deflate/Inflate以及Brotli等算法的压缩和解压缩功能。这些算法能够有效地减少数据的大小,从而减少网络传输的时间和带宽消耗,同时减少磁盘上的存储空间。
2024-07-30 16:55:48
1499
原创 Promise.all的理解以及手写Promise.all
是 JavaScript 中的一个静态方法,它接收一个可迭代对象(如数组)作为参数,这个参数包含多个 Promise 实例。返回一个新的 Promise,该 Promise 只有在所有传入的 Promise 都已解决或其中一个 Promise 被拒绝时才会结束。
2024-07-26 16:51:17
653
原创 instanceof介绍及手写instanceof
instanceof是 JavaScript 中的一个操作符,用于检测一个对象是否在其原型链上有构造函数prototype属性。换句话说,instanceof用来判断一个变量是否是一个特定构造函数的实例。当你使用instanceof操作符时,它会检查左边操作数的原型链中是否包含右边操作数的prototype属性。如果是,则返回true;否则返回false。
2024-07-26 14:56:10
382
原创 脚手架及自定义编写脚手架
例如:vue-cli Angular CLI Create React App编写自己的脚手架是指创建一个定制化的工具,用于快速生成项目的基础结构和代码文件,以及提供一些常用的命令和功能。通过编写自己的脚手架,你可以定义项目的目录结构、文件模板,管理项目的依赖项,生成代码片段,以及提供命令行接口等功能项目结构:脚手架定义了项目的目录结构,包括源代码、配置文件、静态资源等。文件模板:脚手架提供了一些预定义的文件模板,如HTML模板、样式表、配置文件等,以加快开发者创建新文件的速度。
2024-07-20 11:00:34
796
原创 React Element介绍
React Element是React中的核心概念之一,它代表了React应用中的UI元素。React Element并不是真实的DOM节点,而是一个轻量级的、不可变的、描述性的对象,它包含了创建UI所需的类型(type)、属性(props)和子元素(children)等信息。React使用React Element来构建UI,并在内部通过虚拟DOM(Virtual DOM)来优化真实的DOM更新。
2024-07-14 15:56:31
661
原创 发布npm包
package.json里面的name不能重复,否则会发包失败,报错403。1.先检查自己的npm源是否为官方镜像源,不是的话要切换为官方镜像源。登录完成之后使用npm publish 发布npm包。3.使用npm login 登录账号。也可以直接去npm官网注册。
2024-07-07 16:04:11
361
原创 发布订阅模式
发布订阅模式有两个角色发布者:发布事件或者消息订阅者:订阅了发布者的事件或消息,并在事件发生时做出响应图解:在订阅发布模式中,发布者将事件发送到事件总线或事件管理器中,然后订阅者订阅感兴趣的事件。当事件发生时,事件总线或事件管理器会通知所有订阅了该事件的订阅者,并调用它们预先注册的回调函数,从而实现了一种松耦合的通信方式。// 订阅事件if (!// 触发事件});// 订阅事件// 触发指定事件,执行对应的回调函数EventEmitter 类用于管理事件的订阅和触发。
2024-07-06 21:07:17
444
原创 Ajax和Axios实现
AJAX = 异步 JavaScript 和 XML。AJAX 是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。详细介绍请移步AJAX 简介 | 菜鸟教程Axios 是一个基于promise网络请求库,作用于node.js和浏览器中。它是isomorphic的(即同一套代码可以运行在浏览器和node.js中)。
2024-06-30 16:53:17
903
原创 WebSocket以及ws源码学习
HTML5开始提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议。它基于TCP传输协议,并复用HTTP的握手通道。WebSocket可以在浏览器里使用支持双向通信使用很简单。
2024-06-30 16:51:39
863
原创 NestJS学习笔记之守卫
它们根据运行时出现的某些条件(例如权限,角色,访问控制列表等)来确定给定的请求是否由路由处理程序处理。在传统的 Express 应用程序中,通常由中间件处理授权(以及认证)。中间件是身份验证的良好选择,因为诸如token验证或添加属性到request对象上与特定路由(及其元数据)没有强关联。第一个参数为key,第二个参数自定义(里面定义我们能够访问哪些角色,比如定义了role为admin的时候,我们才能访问finaAll)tips 守卫在每个中间件之后执行,但在任何拦截器或管道之前执行。
2024-06-24 13:23:01
491
原创 NestJS学习笔记之管道验证DTO
value就是前端传过来的数据,metaData就是元数据,通过metatype可以去实例化这个类访问接口控制台打印出value和metadata实例化DTO再次访问接口,打印出dto通过 validate验证DTO返回一个promise的错误信息,如果有错误抛出访问接口,可以看到,当name为空字符串时,接口访问失败,返回了错误信息控制台打印出error,说明了name属性不能为空。
2024-06-17 13:30:35
494
原创 NestJS学习笔记之管道转换
管道 可以做两件事1.转换,可以将前端传入的数据转成成我们需要的数据2.验证, 类似于前端的rules 配置验证规则转换Nestjs提供了八个内置转换API。
2024-06-17 13:25:40
290
原创 NestJS学习笔记之异常拦截器
让我们创建一个异常过滤器,它负责捕获作为HttpException类实例的异常,并为它们设置自定义响应逻辑。为此,我们需要访问底层平台Request和Response。我们将访问Request对象,以便提取原始url并将其包含在日志信息中。我们将使用 Response.json()方法,使用 Response对象直接控制发送的响应。我这里定义的响应拦截器和异常拦截器都是全局拦截器。common下面新建filter.ts。在main.ts注册。
2024-05-28 22:28:40
204
原创 NestJS学习笔记之响应拦截器
拦截器具有一系列有用的功能,这些功能受面向切面编程(AOP)技术的启发。我们想给它返回一个标准的json格式,就要给我们的数据做一个全局form。我们现在没有给我们的Nestjs规范返回给前端的数据格式,现在比较乱。新建common文件夹,创建 response.ts。Nest Js配合Rxjs格式化数据。,已经返回成我们需要的数据格式了。在main.ts注册。
2024-05-28 22:26:17
295
原创 NestJS学习笔记之上传图片-静态目录
在upload.controller中,使用UseInterceptors装饰器,它里面有一些参数,如果上传单个文件就使用FileInterceptor,如果上传多个文件就使用FilesInterceptor,使用UploadedFile装饰器接受file文件。需要用到multer的diskStorage,destination设置存放目录,extname用来读取文件后缀,filename给文件重新命名。保存后,启动项目,可以看到项目启动就会打包,在dist目录下如果有images文件夹代表成功了。
2024-05-14 23:00:38
572
原创 NestJS学习笔记之中间件
然后在user.module中实现NestModule,实现接口里面的configure方法,返回一个消费者 ,consumer通过apply注册中间件,通过forRoutes指定Controller路由。注意: app.use(cors())和app.use(middleWareAll)的调用顺序不要弄反了,先是解决跨域再使用中间件,顺序出错跨域还是会出现。use方法源码,可以看到req是客户端传递给服务端的数据对象,里面包含了一些请求参数等,res是服务端返回给客户端的数据对象。例如cors处理跨域。
2024-05-14 22:56:52
576
原创 NestJS学习笔记之模块
事实上,根模块可能是应用程序中唯一的模块,特别是当应用程序很小时,但是对于大型程序来说这是没有意义的。动态模块主要就是为了给模块传递参数,可以给该模块添加一个静态方法用来接受参数,返回的对象里面module,providers,exports都是必须的,且module的值要跟模块名称一致。在list模块使用无须再去list.module.ts中导入,直接在list.controller中使用即可。注意,无论当前模块是不是全局模块,一律都需要在app.module进行引入,因为app.mudule是根模块。
2024-04-28 22:08:33
541
原创 NestJS学习笔记之提供者
第一种用法就是一个语法糖其实它的全称是这样的@Module({}],})自定义名称之后,需要用对应的Inject取,不然会找不到的通过useValue@Module({},{}],})
2024-04-28 22:02:43
222
原创 NestJS学习笔记之session
session是服务器,为每个用户的浏览器创建的一个会话对象,这个session 会记录到浏览器的cookie,用来区分用户我们使用的是nestjs,默认框架express它也支持express的插件,所以我们就可以安装express的session需要智能提示可以装一个声明依赖然后在main.ts引入,通过app.use注册session。
2024-04-28 21:58:50
560
原创 NestJS学习笔记之控制器
注意,返回的req里面的路径参数是在params里面,所以获取路径参数id是通过req.params.id。很多时候,每个控制器都有多个路由,不同的路由可以执行不同的动作。注意,返回的req里面的请求参数是在query里面,所以获取请求参数是通过req.query。注意,返回的req里面的请求参数是在body里面,所以获取请求参数是通过req.body。可以使用Request装饰器,或者Body装饰器,跟express完全一样。可以使用Request装饰器或者Param装饰器,跟express完全一样。
2024-04-20 21:21:02
446
原创 NestJS学习笔记之RESTful风格设计
RESTful 是一种风格,在RESTful中,一切都被认为是资源,每个资源有对应的URL标识.不是标准也不是协议,只是一种风格。当然你也可以不按照它的风格去写。
2024-04-20 21:00:55
399
原创 NestJS学习笔记之常用命令
第一次使用这个命令的时候,除了生成文件之外还会自动使用npm帮我们更新资源,安装一些额外的插件,后续再次使用就不会更新了。生成了一套标准的CURD 模板。
2024-04-20 20:58:10
262
原创 NestJS学习笔记之Nest cli
main.ts:入口文件(主文件),类似于vue的main.ts通过NestFactory.create(AppModule) 创建一个app,就是类似于绑定一个根组件App.vueapp.listen(3000):监听一个端口。
2024-04-20 20:54:59
360
原创 NestJS学习笔记之NestJS简介
Nest 在这些常见的 Node.js 框架 (Express/Fastify) 之上提高了一个抽象级别,但仍然向开发者直接暴露了底层框架的 API。这将创建一个新的项目目录,并使用核心的 Nest 文件和支撑模块填充该目录,从而为项目创建一个传统的基本结构。(仍然允许开发者使用纯 JavaScript 进行开发),并结合了 OOP (面向对象编程)、FP (函数式编程)和 FRP (函数响应式编程)。创建项目,也可以克隆一个 starter project(两者的结果是一样的)。开始之前,你可以使用。
2024-04-20 20:42:15
255
原创 TypeScript学习笔记之infer
在协变位置上同一个类型变量的多个候选类型会被推断为联合类型;在逆变位置上,同一个类型变量的多个候选类型则会被推断为交叉类型。
2024-04-14 22:17:43
344
原创 TypeScript学习笔记之泛型工具
TypeScript 泛型工具:提升类型灵活性和重用性泛型工具是一组预定义的泛型类型和操作符,用于操作和转换类型。它们可以帮助我们编写更灵活、更通用的代码,并提高代码的可读性和可维护性。
2024-04-14 22:15:53
473
原创 TypeScript学习笔记之类型兼容
所谓的类型兼容性,就是用于确定一个类型是否能赋值给其他的类型。中的类型兼容性是基于的(也就是形状),如果A要兼容B,那么A至少具有B相同的属性。
2024-04-14 22:10:45
207
原创 TypeScript学习笔记之类型守卫
实现一个函数支持任意类型如果是对象,就检查里面的属性,如果里面的属性是number就取两位,如果是string就去除左右空格如果是函数就执行value();});a:666.662,f(obj)第一个问题:发现打印出的this执向windows,原因在于value是自身单独进行了调用,相当于局部函数,不是由obj所调用});a:666.662,f(obj)第二个问题:value.的时候没有代码提示这时候就需要自定义守卫了类型谓词的语法形式。
2024-04-14 22:06:47
446
原创 TypeScript学习笔记之Proxy和Reflect
上面这些方法的作用,大部分与Object对象的同名方法的作用都是相同的,而且它与Proxy对象的方法是一一对应的。Proxy 对象用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)要使用 Proxy 包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)。一个通常以函数作为属性的对象,各属性中的函数分别定义了在执行各种操作时代理 p 的行为。Reflect对象一共有 13 个静态方法。属性读取操作的捕捉器。属性设置操作的捕捉器。
2024-04-14 22:03:06
589
原创 TypeScript学习笔记之webpack构建TS项目
配置完以后,需要去package.json中配置启动方式。可以看到打包文件已经输出在dist目录下了。其中public和src都是自己创建。
2024-04-03 14:52:44
258
原创 TypeScript学习笔记之Set、Map、WeakSet、WeakMap
在的时候常用的Array object ,在es6又新增了两个类型,Set和Map,类似于数组和对象。
2024-04-03 13:58:05
823
原创 TypeScript学习笔记之发布订阅模式
含义:on方法来订阅一个事件,当这个事件被发布时,所有订阅这个事件的回调函数将被调用。emit方法用于发布一个事件。off方法来取消订阅一个事件。once方法代表当前时间只执行一次。(订阅者只订阅事件,之后就取消订阅)
2024-04-02 22:05:37
309
原创 TypeScript学习笔记之装饰器Decorator
随着TypeScript和ES6里引入了类,在一些场景下我们需要额外的特性来支持标注或修改类及其成员。装饰器(Decorators)为我们在类的声明及成员上通过元编程语法添加标注提供了一种方式。Javascript里的装饰器目前处在,但在TypeScript里已做为一项实验性特性予以支持。注意 装饰器是一项实验性特性,在未来的版本中可能会发生改变。
2024-04-02 21:56:28
1124
原创 TypeScript学习笔记之Mixins混入
除了传统的面向对象继承方式,还流行一种通过可重用组件创建类的方式,就是联合另一个简单类的代码。你可能在Scala等语言里对mixins及其特性已经很熟悉了,但它在JavaScript中也是很流行的。
2024-04-02 21:51:53
186
原创 TypeScript学习笔记之声明文件d.ts
当使用第三方库时,我们需要引用它的声明文件,才能获得对应的代码补全、接口提示等功能。我们可以去node_modules 下面去找axios 的package json。发现axios已经指定了声明文件,所以没有报错可以直接用。通过语法declare,暴露我们声明的axios 对象。如果有一些第三方包确实没有声明文件我们可以自己去定义。例如我们有一个express 和 axios。名称.d.ts,创建一个文件去声明。先安装axios和express。那为什么axios 没有报错。让我们去下载他的声明文件。
2024-03-31 23:17:21
444
原创 TypeScript学习笔记之三斜线指令
三斜线指令是包含单个XML标签的单行注释。注释的内容会做为编译器指令使用。三斜线指令仅可放在包含它的文件的最顶端。一个三斜线指令的前面只能出现单行或多行注释,这包括其它的三斜线指令。如果它们出现在一个语句或声明之后,那么它们会被当做普通的单行注释,并且不具有特殊的涵义。
2024-03-31 23:10:39
237
原创 TypeScript学习笔记之命名空间
这篇文章描述了如何在TypeScript里使用命名空间(之前叫做“内部模块”)来组织你的代码。就像我们在术语说明里提到的那样,“内部模块”现在叫做“命名空间”。另外,任何使用 module关键字来声明一个内部模块的地方都应该使用namespace关键字来替换。这就避免了让新的使用者被相似的名称所迷惑。我们在工作中无法避免全局变量造成的污染,TypeScript提供了namespace 避免这个问题出现内部模块,主要用于组织代码,避免命名冲突。命名空间内的类默认私有通过 export 暴露。
2024-03-25 23:05:37
370
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人