来自分类 Vue2026-01-04 14:40:09
通常说, ajax 请求错误有两种, 一种是网络问题或者代码问题所造成的 400, 500错误等, 另外一种是请求参数后端通不过验证, 由后端抛出的错误 第二种根据不同的后端框架或者程序猿又可以分成两种, 一种是直接返回 json, 用一个 特别的 code 来区别正常请求返回的数据, 如: ``` { code: -404, message: '这是错误信息', data: '', } ``` 还有一种就是抛出 http 404 之类的, 然后把错误原因放在 header 里. 在组件写调用 ajax时, 通常都是这么写(这里以 axios 为例): ```javascript import axios from 'axios' axios.get('/user?ID=12345') .then(function (response) { if (response.data.code === 200) { console.log(response.data) } else { // 由后端抛出的错误 alert(response.data.m...
来自分类 前端2025-12-31 15:54:16
## nodejs ===框架=== https://github.com/expressjs/express `快速、无约束、极简的node web框架` [[文档]](https://expressjs.com/) https://github.com/koajs/koa `使用 ES2017 异步函数为 node.js 提供表现力的中间件` [[文档]](https://koajs.com/) ===其他=== https://github.com/cheeriojs/cheerio `为服务器特别定制的,快速、灵活、实施的jQuery核心实现` [[文档]](https://github.com/cheeriojs/cheerio/wiki/Chinese-README) https://github.com/node-schedule/node-schedule `定时任务` https://github.com/paulmillr/chokidar `最小和高效的跨平台文件监视库` https://github.com/shelljs/shelljs `Node.js的...
来自分类 Vue2025-12-23 16:15:25
在Vue3中,ref和shallowRef的选择取决于数据的结构和性能需求。以下是详细的选择指南: ### 1. 基础类型(String, Number, Boolean等) #### ✅ 优先使用 ref ```ts // 基础类型 - 使用 ref(两者无性能差异) const count = ref(0) const name = ref('张三') const isLoading = ref(false) ``` 理由:对于基础类型,ref和shallowRef的行为完全一致,没有性能差异,使用ref更统一。 ### 2. 单层对象(平坦对象) #### ✅ 推荐使用 ref ```ts // 单层对象 - 使用 ref const user = ref({ name: '张三', age: 25, email: 'zhangsan@example.com' }) // 修改属性会自动触发响应式更新 user.value.name = '李四' ``` 理由: - 对象属性会被自动深度响应化 - 代码更直观,符合预期 - 性能开销可接受(只有一层深度) ###...
来自分类 Vue2025-12-18 13:59:24
看到检测到新版本后自动更新版本, 第一反应想到就是`ServiceWorker`, 是的, 使用`ServiceWorker`好处多多, 包括提示更新版本, 但是使用`ServiceWorker`有一个硬性条件, 那就是必须是 https 或者 localhost, 一些时候需要部署在内网时, 就没法实现了, 那么就必须换个思路来 大概思路就是: 请求一个文件, 读取该文件内容里的时间戳, 和本地缓存里的时间戳做对比, 如果不一致就给出提示, 让用户点击刷新 第一步: 那就是编译时, 附带生成一个文件, 并记录编译时的时间戳 这个我们可以写一个简单的`vite`插件, 编译后自动生成一个json文件, 当然不嫌麻烦, 也可以手动来改动一个文件 ```ts export default defineConfig(({ mode }: ConfigEnv) => { // 编译后保存文件的文件, 一般是dist文件夹 const outDir = 'dist' return { // 其他配置 plugins: [ ...
来自分类 前端2025-07-25 17:55:05
因为国内网络的原因, 给 npm 设置 registry 是必须的事情, 不然安装个依赖都下到天荒地老, 然后设置了 registry 后, 使用`npm publish`又会将包发到非官方去, 简单的做法就是去`.npmrc`文件把 registry 给注释了, 然后整天改来改去也挺麻烦的, 有没有省事一点的方法呢? ## 1. 登录npm 首先, 我们需要先登录到npm, 登录的方法有两种 ### 1.1 账号密码登录 ```bash npm login --registry=https://registry.npmjs.org/ ``` 这里不能直接使用`npm login`登录, 不然会链接到`registry`设置的环境去 ```bash npm login # npm notice Log in on https://registry.npmmirror.com/ ``` 然后输入 npmjs 的账号密码, 即可登录 ### 1.2 使用 token 登录 如果你不希望每次使用 npm 时都...
来自分类 其他2025-04-25 09:53:08
默认情况下,Docker 在 Linux 上安装时会将其数据(如镜像和容器)存储在 /var/lib/docker 目录下,这个目录通常位于根分区 /。 如果你的根分区 / 的空间不足,你可以考虑将 Docker 的数据目录移动到其他分区,或者在安装 Docker 时直接配置它使用其他分区。 要更改 Docker 的默认存储位置,你可以通过修改 Docker 的配置文件或在启动 Docker 服务时设置环境变量来指定新的数据目录。 下面是一些步骤说明如何进行配置: # 1. 停止 docker 服务 ```bash systemctl stop docker # 如果没有权限, 可以使用 sudo sudo systemctl stop docker ``` # 2. 创建新的存储目录 ```bash mkdir -p /data/docker ``` # 3. 修改 Docker 配置文件 ```bash vi /etc/docker/daemon.json ``` 如果是空文件, 添加以下内容 ```json { "data-root": "/data/...
来自分类 其他2025-04-15 10:37:03
```bash cd ~ cat > docker.sh << 'EOF' #!/bin/bash # 下载docker包 # 根据架构适当修改, 详情见: https://mirrors.aliyun.com/docker-ce/linux/static/stable/ wget https://mirrors.aliyun.com/docker-ce/linux/static/stable/aarch64/docker-28.0.4.tgz # 解压 tar zxf docker-28.0.4.tgz # 移动解压后的文件夹到/usr/bin mv docker/* /usr/bin # 写入docker.service开始 ===> cat > /usr/lib/systemd/system/docker.service << EOF_DOCKER_SERVICE [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=networ...
来自分类 其他2025-04-15 10:31:48
```bash # 查看磁盘 lsblk # 输入类似内容 # nvme1n1 259:0 0 1.5T 0 disk # nvme0n1 259:1 0 1.5T 0 disk # nvme2n1 259:2 0 1.5T 0 disk # 下面命令行中的`nvme0n1`为其中一块磁盘, 根据需要可修改 # 创建分区 (依次输入: n - 回车 - 回车 - 回车 - w) fdisk /dev/nvme0n1 # 格式化分区 mkfs.ext4 /dev/nvme0n1 # 创建挂载目录 mkdir -p /data # 临时挂载分区 mount /dev/nvme0n1 /data # 设置开机自动挂载 UUID=$(blkid -s UUID -o value /dev/nvme0n1) sh -c "echo 'UUID=$UUID /data ext4 defaults,nofail 0 2' >> /etc/fstab" # 验证配置无误 mount -a # 验证挂载 df -h /data ``` ...
来自分类 React2025-01-16 10:27:34
一开始的思路是在列表页面, 利用`useEffect`钩子监听location, 在清除函数里获取滚动条的高度, 可惜获取时机好像不对, 一直获取的高度都是0, 通过打印`body`的`innterHTML`发现, 这时候路由已经开始渲染详情页了 然后开始尝试使用`addEventListener`监听`scroll`, 代码如下: ```ts export function useSaveScroll(key: string) { const location = useLocation() const pathname = location.pathname useEffect(() => { const handleScroll = () => { ls.set(`scroll_path_${pathname}`, window.scrollY) } const scrollY = ls.get(`scroll_path_${pathname}`) || 0 wi...
来自分类 Vue2024-10-29 16:46:20
### 1. 新建一个 js/ts 文件, 定义好常量 ```ts // design.config.ts /** 设计稿宽度, 此处最好就是按 1920 来计算, 避免 element-ui 之类 UI 框架出现字体不对 */ export const designWidth = 1920 /** 设计稿宽度, 此处最好就是按 1920 来计算, 避免 element-ui 之类 UI 框架出现字体不对 */ export const designHeight = 1080 /** 设计稿倍数 */ export const designMultiple = designWidth / 1920 /** 兼容最小宽度 */ export const minWidth = 1440 /** 兼容最小宽度(px) */ export const minWindow = `${minWidth}Px` /** 为什么设置 100? 设置成便于计算, 计算rem时只需要将 设计稿的宽度 / 100 即可 */ export const fontSize = 100 ``` ### 2. ...