公告-版本升级
芜湖~网站全面更新,由于博主比较懒,由初代动态网站到静态网站,也已经过去了一段时间;刚开始搭建网站的目的很简单,就是凸显自己的成就,喜欢折腾新的东西,那段时间也是对技术的热情,就自己捣鼓着一些稀奇古怪的东西; 现在自己精力大不如从前了,没有太多的精力去消耗了,自己也在前端方向有了一些小的成就;接下来的时间就回去专研某一方向的技术; 此次更新网站的目的,脱离原有的单一的文档流,以多样化文档展示,使得网站更加丰富;新版网站将会以文档的形式进行归类,凸显文档归类的意义; 网站更新的内容接下来大致说一下更新的内容: 网站更新内容: 下个版本功能预知 考虑使用七牛云存储资源图片。 个人项目文档将会具体化。 部分博文重新整理分化。 Version 4.0.1 更新内容 ...
第二章:调皮的童年
...
观察者模式
观察者模式?是一种一对多的关系,当一个对象发生改变时,其他依赖者都会收到对应的通知并及时更新; 就比如说:现场拍卖,台上的是观察者,当商品价格发生改变时就会更新通知所有的竞拍者,其中一件商品对应了多个竞拍者,体现了一对多的关系; 可以参考如下图片: 简单案例123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354class Observer { constructor(name) { this.name = name; } update(price) { console.log(`${this.name} 您收到的价格为: $${price}`); }}class Subject { constructor() { this.observers = []; // 所有竞拍者 this.price = 0; //...
代理模式?
代理模式?代理模式是一种结构型设计模式,它允许你提供对另一个对象的访问点。使用代理对象,我们可以更好地控制与某些对象的交互。代理对象可以确定我们与对象交互时的行为,例如获取值或设置值时。 一般来说,代理是指其他人的替身。您无需直接与该人交谈,而是与代理人交谈,该代理人将代表您尝试联系的人。JavaScript 中也是如此:我们无需直接与目标对象交互,而是与代理对象交互。 简单案例首先创建一个对象, 12345const person = { name: "John Doe", age: 42, nationality: "American",}; 我们不想直接与该对象交互,而是想与代理对象交互。在 JavaScript 中,我们可以通过创建一个新的实例来轻松创建新的代理Proxy。 1234567const person = { name: "John Doe", age: 42, nationality: "American",};const...
发布订阅
什么是发布订阅发布订阅是一种软件设计模式和通信范式,它旨在促进不同软件组件间的松散耦合通信。在订阅发布模式中,有如下两个核心概念: 发布者: 负责发布信息或事件。发布者并不直接将消息发送给特定的接收者,而是将其发布到一个共享的通信媒介——通常是被称为“主题”(Topic)、“频道”(Channel)或“事件总线”(Event Bus)的中介。 订阅者: 对特定类型的信息或事件感兴趣。订阅者向中介(主题或频道)表达其关注的事件类型,并提供一个回调函数(或处理器)以便在相关事件发生时得到通知。订阅者并不关心发布者是谁,也不需要了解其他订阅者的存在。 就好比: 订阅者就好比手机开了个提醒,只关注感兴趣的那块新闻,比如你想知道关于足球比赛的结果,于是你对手机说: “只要有关足球比赛结果出来,就立刻告诉我” 这就是你向手机订阅了足球比赛的结果。 发布者就好比手机的短信,你发布一个消息,比如:...
单例模式
什么是单例模式?单例模式(Singleton Pattern)是简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 简单的说就是不管实例多少次,最终返回的是首次的实例对象; 单例模式不仅减少了内存的开销, 并且解决了一部分在全局变量中冲突的问题。 单例模式确保一个类只有一个实例存在。举个例子说: 一个班只有一名班主任, 而对于这个问题就是一个简单的介绍,同一个班级可以有多个老师,但是只有一个班主任,所以这个班主任就是单例模式。 简单的单例模式123456const time_tool = { title: "时间处理方法", getTime: function () {}, getDate: function () {}, getYear: function ()...
订阅发布与观察者区别
在 JavaScript 中,订阅发布(Publish-Subscribe)模式和观察者(Observer)模式都是用于实现对象间解耦通信的设计模式。虽然这两种模式有相似之处,但它们之间存在一些关键的区别: 概念上的不同: 观察者模式:是一种对象行为模式,它定义了对象之间的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。 订阅发布模式:是一种消息通信模式,对象之间通过事件或消息进行通信,发送者(发布者)不会直接调用接收者(订阅者)的方法,而是将消息发布到一个中介(通常是事件总线或消息队列),订阅者可以订阅这些消息。 实现方式的不同 在观察者模式中,通常有一个具体的 Subject 类,它可以注册、移除观察者(Observer),并且在状态发生变化时通知所有的观察者。 在订阅发布模式中,并没有明确的 Subject 和 Observer...
Nest-JWT授权
介绍身份验证是大多数应用的重要组成部分。有许多不同的方法和策略来处理身份验证。任何项目所采用的方法都取决于其特定的应用需求。本章介绍了几种可以适应各种不同要求的身份验证方法。 让我们充实我们的要求。对于此用例,客户端将首先使用用户名和密码进行身份验证。一旦通过身份验证,服务器将发送一个 JWT,该 JWT 可以在后续请求的授权标头中作为 不记名令牌 发送以证明身份验证。我们还将创建一个仅供包含有效 JWT 的请求访问的受保护路由。 我们将从第一个要求开始:验证用户。然后我们将通过发布 JWT 来扩展它。最后,我们将创建一个受保护的路由来检查请求中的有效 JWT。 JWT 令牌首先安装依赖: 12pnpm add --save @nestjs/jwt 安装成功之后,我们需要在auth.module.ts中注册: 12345678910111213import { Module } from '@nestjs/common';import { JwtModule } from...
Nest-中间件
Nest 中间件 中间件实在路由处理程序之前调用的函数;同时可以访问请求和响应对象,以及程序请求响应周期中的next()中间函数; 简单理解就是:前端路由守卫,做拦截处理; 常见的中间件使用方式大致为:class, 函数 使用使用cli命令自动生成中间件模板:nest g mi logger 12345678910111213141516171819202122232425262728293031323334353637import { Injectable, NestMiddleware } from "@nestjs/common";import { NextFunction, Request, Response } from "express";@Injectable()export class LoggerMiddleware implements NestMiddleware { use(req: Request, res: Response, next:...
Nest-入手Demo
简单了解一些Nest,结合之前我开发的一个小工具日志上报插件,做一个小应用; 这个应用是什么? 有这么一个场景,我在web页面使用了日志上报插件,但是插件的dsn地址是没有的,这个地址需要后端的一个接口地址,那我们用Nest模式一下这个接口地址; 接下来,实践一下: 初始化项目首先,去官网找一下安装命令 12npm i -g @nestjs/clinest new project-name 安装成功之后,所有的代码都是ts编写的; 关于项目的目录结构,可以参考官方文档有具体说明; 我们找到入口文件:main.ts, 其中bootstrap()就是启动函数了; 1234567891011121314151617181920212223242526async function bootstrap() { // 这里使用的是Express, 可以使用Fastify const app = await NestFactory.create<NestExpressApplication>(AppModule, { //...