自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(89)
  • 收藏
  • 关注

原创 一文学会最强大的 node.js 后端框架 nest.js

nest 定义中间件有两种,函数式中间件和类中间件。函数式中间件就和 express 中间件一模一样。next();要在类中定义中间件,这个类就要实现接口。并且中间件类也是可以依赖注入的。next();在许多情况下,您无需编写自定义异常,而可以使用内置的 Nest HTTP异常,如下一节所述。如果确实需要创建自定义的异常,则最好创建自己的异常层次结构,其中自定义异常继承自基类。使用这种方法,Nest可以识别您的异常,并自动处理错误响应。@Get()

2024-05-06 09:04:59 1066 2

原创 油猴脚本:bing 搜索结果居中

【代码】油猴脚本:bing 搜索结果居中。

2024-04-25 02:12:07 261

原创 一文学会 ts 构建工具 —— tsup

config 配置项可指定配置文件。})return {js: `.${return {.js`,},})| 'js'| 'jsx'| 'ts'| 'tsx'| 'css'| 'json'| 'text'| 'base64'| 'file'| 'binary'| 'copy'会发现上面没有图片的 loader,但我们可以指定 loader 去处理某些后缀的图片。

2024-04-20 21:53:14 1177

原创 lua 光速入门

首先明确 lua 和 js Python一样是动态解释性语言,需要解释器执行。并且不同于 Python 的强类型与 js 的弱类型,它有点居中,倾向于强类型。

2024-04-17 21:07:21 1179

原创 一文全面系统学会跨域

只是请求发过去,返回的是静态 HTML 文件,还是后端接口的数据,都靠 location 字段设置的 URL 匹配规则来区分,比如接口服务一般匹配 path 为/api,所以前端中请求接口数据,url 必须带上/api。同时,Cookie依然遵循同源政策,只有用服务器域名设置的Cookie才会上传,其他域名的Cookie并不会上传,且(跨源)原网页代码中的document.cookie也无法读取服务器域名下的Cookie。Cookie 是服务器写入浏览器的一小段信息,只有同源的网页才能共享。

2024-04-14 16:21:28 807

原创 一文学会 Jsonp (JSON_with_Padding) 跨域请求

严格定义 Content-Type: application/json,然后严格过滤 callback 后的参数并且限制长度(进行字符转义,例如)等,这样返回的脚本内容会变成文本格式,脚本将不会执行。定义一个带有形参的函数,将函数名通过url的额外参数传递给服务器,服务器拿到函数后,将函数名拼成函数调用的字符串形式,并将响应数据序列化成字符串,以实参的形式传递给函数,然后返回给客户端。看一下淘宝的搜索框,关键字联想推荐接口的响应数据格式,就知道这是 jsonp 的接口。

2024-04-14 00:29:37 694

原创 一文学会搭建 cli 脚手架工具

通过学习搭建脚手架工具,学习 nodejs 开发命令行工具知识。

2024-03-09 05:18:30 876

原创 electron 开发模板脚手架

之前番茄钟应用,我们采用的是最原始的结构开发。但实际项目开发肯定是用脚手架的。

2024-03-08 00:00:00 579

原创 electron 架构

ResourceDispatcher 是用来处理资源请求的,当页面要请求某些资源的时候,会通过资源调度器 ResourceDispatcher 创建一个请求 id,然后转发到 IPC,在 Browser 进程里处理,然后返回。electron 当初也像 NW 一样,但是发现渲染进程中实现很简单,但是主进程中确很复杂,因为各个系统的 GUI 实现都不一样,比如 Mac 是 NSRunLoop,Linux 是 glib。解决这个问题,思路就是两者的事件循环要整合成一个,这样主进程才不会冲突。

2024-03-07 00:00:00 904

原创 Electron Forge 打包

electron 应用打包方式有很多,比如 electron-builder。但现在官方主推的是 Electron Forge。

2024-03-06 00:00:00 2888

原创 TypeScript 哈希表

有个误区要注意:设计哈希表的时候要明白,存储过程不是这个位置本是没内容的,然后放进一个内容,直到此处出现了冲突,这个位置才开始挂一个桶,然后新旧内容一起都放桶里。而哈希表是放的时候不允许随机放,直接就规定了位置,那去找的时候,不就按位置直接去拿即可。上面提取到第二次已经无法再提了,用语言描述就是 hashcode 从 0 开始与幂底的积再加上字符串第一个字符的编码的和作为下一次的 hashcode,继续乘幂底与第二个字符的编码的和再次作为 hashcode 进入下一轮循环,直到加完所有的字符。

2024-03-05 07:08:51 786

原创 5分钟 electron 入门

在某些与沙盒不兼容的使用情况下(例如,在渲染器中使用原生的 Node.js 模块时),可以禁用特定进程的沙盒。因为预加载脚本与浏览器共享同一个全局 Window 接口,并且可以访问 Node.js API,所以它通过在全局 window 中暴露任意 API 来增强渲染器,以便你的网页内容使用。因为是个阉割版,所以这个想法是行不通的。Electron 的主进程是一个拥有着完全操作系统访问权限的 Node.js 环境,这意味着它具有 require 模块和使用所有 Node.js API 的能力。

2024-03-05 06:51:07 1192

原创 线性表 —— 链表

◼ 数组: 要存储多个元素,数组(或选择链表)可能是最常用的数据结构。 我们之前说过,几乎每一种编程语言都有。◼ 但是数组也有很多缺点: 数组的创建通常需要申请一段(一整块的内存),并且大小是固定的(大多数编程语言数组都是固定的),所以当当前。(一般情况下是申请一个更大的数组,比如2倍。然后将原数组中的元素复制过去,比如 Java 的 ArrayList) 而且在数组开头或中间位置插入数据的成本很高,需要进行大量元素的位移。

2024-02-04 05:16:40 920

原创 线性表 —— 数组、栈、队、链表

数据结构是ADT(抽象数据类型 Abstract Data Type)的物理实现。” — 《数据结构与算法分析》“数据结构(data structure)是计算机中存储、组织数据的方式。通常情况下,精心选择的数据结构可以 带来最优效率的算法。” —中文维基百科。

2024-02-04 05:14:23 1057

原创 ts-node:Cannot use import statement outside a module & Unknown file extension _.ts_ for xxx.ts

解决 ts-node:Cannot use import statement outside a module & Unknown file extension _.ts_ for xxx.ts 报错

2024-02-03 20:47:04 1021

原创 理解按需自动导入 unplugin-auto-import & unplugin-vue-components

如果是自己开发的组件库,为了让它支持自动按需导入,就需要自己编写解析器。},],})resolvers 数组里可以传入一个函数,这个函数会在编译时不断执行。函数接收组件名,并返回一个和 unplugin-auto-import 插件中 imports 配置一样的配置对象,这个对象就是 import 语句的描述对象,最终依据它生成导入语句。注意:组件名会自动转成大驼峰写法。因此所谓的解析器,功能就是根据组件名映射成 import 导入语句。

2023-12-21 22:39:31 3833 3

原创 解决 Antimalware Service Executable 导致 win10 CPU 占用过高的问题

Antimalware Service Executable 也被称为 msmpeng.exe,在后台运行,因此它可以不时地检测文件和程序。Antimalware Service Executable 是一个 Windows 安全进程,它执行针对恶意软件的实时保护。排查发现是 Antimalware service executable 服务在作祟。问题原因:Windows defender 实时扫描硬盘文件,导致 CPU 负载大。当它检测到病毒或其他恶意攻击时,它会删除或隔离它们。

2023-12-08 16:35:02 3108

原创 按需引入 ElMessage,没有样式且类型检查失败

虽然开发环境可以忍着红线不去管它,可以正常使用,但打包构建会失败。可以看到 vscode 可以给出 ElNotification 的类型提示,说明 ts 已经识别,但 eslint 仍然检查失败。Element-plus 在使用 ElMessage 消息弹框的时候没有样式,按照官方的按需加载的方式引入的。现在 ts 已经不抱类型错误,但如果配置了 eslint,则 eslint 就会开始报错了。配置开启后,默认就会在 vite 文件同级目录中自动生成对应的。其实自动导入已经有了 ts 的类型声明,它就在。

2023-11-26 08:21:16 1710

原创 filter - 常用滤镜效果(毛玻璃、图片阴影、图片褪色)

box-shadow 属性在元素的整个框后面创建一个矩形阴影,而 drop-shadow() 过滤器则是创建一个符合图像本身形状 (alpha 通道) 的阴影。如果不透明,图片内容就是一个矩形,那效果和 box-shadow 看起来一样了,都是生成一个矩形的阴影。区别在于,filter 表示让本元素像素点参与计算,drop-filter 表示将本元素下面盖着的元素参与计算。它可以调整像素点的色相,函数里面的角度,就是色相环上对应的颜色。滤镜:将元素中的像素点通过一些算法计算后,转换成新的像素点。

2023-11-17 07:46:14 330

原创 sass 生成辅助色

一个按钮往往有 4 个状态。为了表示这 4 个状态,需要设置 4 个颜色来提示用户。按钮类型一般有 5 个:以 primary 类型按钮为例,设置它不同状态下的颜色:

2023-11-14 03:28:45 939

原创 sass 封装媒体查询工具

用 hash 映射优化 if,也就是定义一个对象。sass 中可以定义对象。注意:sass 中()括号就代表 js 的花括号{}和方括号[]。以下就是一个对象,这 5 个属性设置 5 个断点,除最后一个大屏外,其他断点属性值为数组。之前的代码设置了 4 个断点,区别不大。/* 定义断点对象 */tv: 1281px:获取对象的属性值数组类型:list数值类型:number/* 1. 读取断点对象属性值 *//* 2. 类型判断是否为数组 *//* 3. 取出数组中的数据 */

2023-11-13 07:15:32 1081

原创 gird 卡片布局

简单说就是:fill是有足够空间就优先创建列来填充,哪怕是空白列,仅在剩余空间放不下一列时(设置了列最小宽度),才拉伸卡片宽度均分该剩余空间。注意:可能会看到 gird-gap 这样的属性,但该 grid- 前缀已弃用(但谁知道呢,可能永远不会从浏览器中删除)。分别是 grid-column-start + 和 grid-row-start + grid-column-end grid-row-end 的简写。第二个参数:每次的单元格大小。第一个参数为合并起始的网格线,第二个参数为合并结束的网格线。

2023-11-11 01:47:12 332

原创 无感刷新 token

又因为无论是 access token 还是 refresh token 都是放在请求头的 authorization 上携带,此时请求拦截设置的 access token 就会覆盖掉 refresh token,导致刷新接口拿不到 refresh token。前一个刷新请求还没拿到最新的 access token,后一个刷新请求又发出了,这就出现了并发刷新 token ,冗余发送请求的情况。在请求拦截器中保存当前请求的url到数组中,后续的请求都需要判断一下,当前请求的url是否已经在数组中。

2023-11-03 03:27:07 1256

原创 防止重复提交请求

用一个数组保存当前请求的 url,此时还未响应。如果再次发起同样请求,比对 url 发现已经存在数组中,则拦截请求,提示重复提交。当该请求响应结束后,就将 url 从数组中剔除。则可再次发起上一次 url 的请求。

2023-11-03 02:52:15 418 1

原创 axios 实现请求 loading 效果

loading 分为全屏 loading 和局部 loading。axios 中设置 loading 只能设置全屏 loading,因为局部 loading 需要当前局部的 dom,在 axios 中显然拿不到发起请求的元素 dom。

2023-11-03 02:43:05 1347 1

原创 axios 实现请求重试

如果请求依旧失败,则触发第二次请求的全局错误拦截,最后再次触发重试。第一次请求失败,触发全局错误拦截,然后一路抛出错误,触发到重试的错误拦截器。请求重试的核心是可以重放请求,具体实现就是在 axios 中,拿到当前请求的 config 对象,再用 axios 实例,就能重放请求。当请求次数用完,则错误拦截器继续抛出错误对象,触发第一次请求的 request 方法的 catch 代码块。上面是一种请求重试的场景,一般情况下也不需要重试,所以我们这里讲的请求重试,指的都是请求网络错误的情况下需要重试。

2023-11-03 02:19:28 4485

原创 并发请求控制

这两种方式,第一种压根不是并发请求,准确说应该是并发发起请求。第二种有了滑动补位,才能说是一直以最大并发数在进行请求流程。Chrome 浏览器最多并发6个请求。一般情况下,我们都会设置并发数为 3。并发请求控制主要有两种区别:假设并发数为 3。

2023-11-03 02:03:53 140

原创 axios 全局错误处理和请求取消

这两个功能都是用拦截器实现。

2023-11-03 01:39:47 1236

原创 以配置的方式开关axios拦截器功能

通过在 config 对象上添加额外配置的方式来实现针对某个请求开关某个拦截器的目标。扩展 config 类型将额外配置项从请求 config 保存到 响应 config 对象上编写具体功能的拦截器。

2023-11-03 00:55:42 825

原创 ts 简易封装 axios,统一 API

在通用请求方法 request 基础上封装了同名的 http 方法使用泛型可获得请求参数和请求结果的类型提示额外封装了文件上传的方法。

2023-11-01 06:54:27 2196 2

原创 以管理员身份打开终端 Windows Terminal

在运行窗口输入想要运行的应用名称后,按住 Ctrl + Shift,再点击确定按钮进行运行。比如:以管理员运行 windows 的新终端,windows teminal。这个方法也使用于管理员身份打开其他软件。

2023-08-23 05:13:00 1663 2

原创 两台电脑之间传输文件——就近共享

步骤1. 在接收和发送设备上都按“Windows + I”键打开设置,再选择“系统” > “体验共享”,将“就近共享”按钮打开。并选择“附近的任何人“,如果两台设备都登录了自己的微软账号则可以选择”仅我的设备“如果共享的电脑正在运行最新版本的Windows 11,则如果共享到的Windows 10/11电脑连接到同一专用Wi-Fi网络,则可以通过Wi-Fi共享。否则,可以通过蓝牙共享。就近共享下面的“跨设备共享”,是共享应用数据的,比如登录同一个微软账号后,剪贴板数据互通。它适合偶尔传输一些简单文件。

2023-07-02 18:59:52 2060

原创 vscode配置终端默认为git bash

如果配置为 git-bash.exe 路径,则会单独打开 git bash 窗口,而不是嵌入 vscode 终端页签中。注意不要配置 git-bash.exe 的路径。

2023-06-28 04:28:00 2083

原创 你的连接不是专用连接 SEC_E_UNTRUSTED_ROOT (0x80090325)

我之前大量网站出现“你的连接不是专用连接”的问题,高度怀疑也是 VMware 的原因。这里的服务器就是 GitHub。同样的,此时访问 GitHub 也会因证书问题而失败。这是一个与 SSL/TLS 连接相关的错误,通常是由于证书问题引起的。场景:git clone 项目时,git 报出上面的问题。为啥 GitHub 的证书是 VMware?表示客户端不信任服务器的根证书。

2023-06-16 01:06:03 1610

原创 shell和 terminal 终端是什么?

Unix 系统为了支持这些电传打字机,就设计了名为 tty 的子系统(没错,因为当时的终端全都是 tty,所以这个系统也被命名为了 tty,就是这么简单粗暴),将具体的硬件设备抽象为操作系统内部位于 /dev/tty* 的设备文件。Windows 下的 explorer.exe 就是一个典型的图形 Shell(没错,它确实是,因为它接受来自你的指令,并且会帮你与内核交互完成你的指令)。大家都知道,操作系统有一个叫做 内核 (Kernel) 的东西,它管理着整台计算机的硬件,是现代操作系统中最基本的部分。

2023-05-01 18:08:35 1213

原创 一文看明白大文件上传

大文件上传相比于传统的小文件上传,需要注意一些细节问题以保证上传过程的稳定和可靠,以下是一些需要注意的细节点:简单文件长传接上回,继续。基本原理:blob 就像字符串一样不可更改,但可以被切割。file 继承了所有 blob 的方法。文件使用方法进行切割,所以要记录每次切割的块大小,以及每次起始切割的位置。MD5 校验文件一致性SparkMD5.jsSparkMD5是一个JavaScript库,用于计算字符串的MD5哈希值。它可以在浏览器和Node.js环境中使用。SparkMD5采用了基于Bit

2023-04-13 02:15:00 674

原创 一文学会 express

x-www-form-urlencoded 纸面翻译即所谓 url 格式的编码,是 post 的默认 Content-Type。get 请求的数据一般是拼接在 url 后面请求的,像这样 username=tom&pwd=123,这样的格式叫查询参数。x-www-form-urlencoded 格式也长这样,所以说是 url 格式的编码。不同点在于,“查询参数”不是添加到 url 后面,而是添加在 post 请求的 body 里。

2023-03-31 22:23:51 551

原创 手写 Promise 静态方法

allSettled 与 all 差不多,区别就是当 allSettled 接收的 promise 数组中存在 reject 的 promise 时,它不会中断整个 allSettled 函数的执行,allSettled 返回的 promise 不会变成 rejected,依然为 pending,继续执行数组中后续的 promise。race 方法的用法:基本也和 all 差不多,区别就是只要数组中有一个 promise 确定了状态就立即确定了整个 race 返回的 promise 的状态。

2023-03-26 02:29:09 663

原创 大白话通俗易懂地手写 Promise

手写 promise 大白话,那些在 then 自身中调用的参数函数已经处理好了,第二个 promise 的 resolve 很容易拿到它们的返回值,但那些被加入到数组中在第一个 promise 的 resolve 中执行的参数函数的返回值怎么办?我们知道执行 resolve 后就会执行 then 中的第一个参数函数,所以 then 中的参数函数调用肯定是在 resolve 函数的函数体中,这样才能做到 resolve 函数执行,然后 then 的参数函数跟着执行。现在假如 then 函数本身在宏任务中呢?

2023-03-25 05:39:06 263

原创 为什么 js 事件总是以 on 开头?

为什么 js 事件总是以 on 开头?

2023-03-23 21:24:48 223

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除