- 博客(799)
- 资源 (12)
- 问答 (3)
- 收藏
- 关注
原创 使用 Buffer.from(file.originalname, ‘latin1‘).toString(‘utf8‘) 以后不出现乱码是为什么?
中文文件名上传乱码的解决方案:当使用multipart/form-data上传文件时,文件名可能被错误地用Latin1编码解析导致乱码。通过Buffer.from(file.originalname, 'latin1').toString('utf8')可手动纠正编码:先将乱码字符串按Latin1还原为原始字节,再用UTF-8正确解码。该方法适用于处理multer等中间件接收中文文件名时出现的"文件"类乱码问题,有效恢复原始文件名如"文件.txt"。最佳实践建
2025-06-20 16:27:32
334
原创 GitHub Copilot 配置快捷键
你可以在 VS Code 中自定义 GitHub Copilot 的快捷键:(macOS)输入,点击进入。copilot设置快捷键。
2025-06-20 16:18:55
588
原创 GitHub Copilot 是什么,怎么使用
GitHub Copilot是由GitHub与OpenAI联合开发的AI编程助手,能自动补全代码、根据注释生成代码、提供API参考用法等。支持Python、JavaScript等多种主流语言,可在VS Code、JetBrains等主流IDE中使用。提供30天免费试用,个人版年费100美元。该工具能显著提升编程效率,例如输入注释即可自动生成斐波那契数列函数代码。
2025-06-20 16:01:33
523
原创 Mysql数据库实现外键约束(Foreign Key Constraint),防止“孤儿数据”
摘要: files 表通过外键约束 files.folder_id 关联 folders.id,确保文件必须属于有效目录。外键强制数据一致性,防止无效引用,如删除目录时通过 ON DELETE CASCADE 自动删除关联文件。可通过 SHOW CREATE TABLE files 查看外键定义,其结构包含字段(如文件名、大小、上传时间)、索引及表配置(InnoDB引擎、UTF8mb4字符集)。外键约束既保障数据完整性,也需操作时验证目录存在性。
2025-06-20 11:00:01
817
原创 Express 中用于返回响应的两种常用方法 res.status(200).json() 和 res.status(200).send()
在 Express 中,res.json() 和 res.send() 的区别主要在于响应格式和数据类型处理。res.json() 会自动设置 Content-Type 为 JSON 并转换数据为 JSON 格式,适合 API 响应;而 res.send() 可返回任意类型数据(文本/HTML/Buffer),适合非结构化响应。建议 API 统一使用 res.json() 返回 JSON 数据,需要返回 HTML 或纯文本时使用 res.send()。两种方法都能返回对象,但 res.json() 更为可靠
2025-06-20 10:32:49
259
原创 Mysql2/promise 返回,await 使用总结
本文介绍了MySQL查询操作的不同返回结构: SELECT返回数组[rows, fields],其中rows是记录数组 INSERT返回插入结果对象,包含affectedRows和insertId等字段 UPDATE返回更新结果,重点关注affectedRows和changedRows DELETE返回删除结果,主要查看affectedRows 特别注意:必须使用数组解构[result]获取操作结果,直接解构对象会导致错误。
2025-06-19 22:20:17
384
原创 Cursor开发工具Prettier格式插件配置
这篇JSON配置文件摘要了VS Code编辑器及相关插件的个性化设置,主要包括:Tabnine AI补全的实验性自动导入、文件类型关联映射、Emmet扩展支持、Git自动拉取、编辑器缩进格式(2空格)、Prettier格式化规则(单引号/不换行/保留分号)、代码迷你地图启用等优化配置,同时关闭了部分插件的自动功能和提示信息。这些设置共同优化了开发环境的代码编辑、格式化和版本控制体验。
2025-06-19 13:16:36
225
原创 Cursor添加Prettier插件格式化vue代码
Prettier代码格式化配置指南 摘要:本文详细介绍了Prettier代码格式化工具的使用方法,重点说明了如何通过VS Code配置实现"一行显示"的特殊格式化效果。内容包括:1) Prettier插件安装步骤;2) 关键配置参数说明,特别是通过设置超长printWidth(10000)实现代码强制单行显示;3) 其他常用Prettier选项如单引号、无分号、无尾逗号等设置。文中还附带了完整的配置示例和详细注释,帮助开发者理解每个参数的作用。
2025-06-18 07:42:51
669
原创 使用 Unicode 图标显示什么时候推荐,什么时候不推荐
在代码中使用Unicode图标(如📄📋)是可行的,但适用性因项目而异: ✅ 推荐场景: 小型/个人项目:直观快捷,无需额外资源。 移动端/Web页面:兼容性好,避免图标库依赖。 ⚠️ 谨慎使用: 企业级项目:不同系统/浏览器显示可能不一致。 定制化UI:无法控制颜色和风格统一。 📌 建议: 小型项目直接使用Unicode图标,商业项目推荐iconfont/SVG方案,动态场景可用JS映射管理(如Vue示例)。
2025-06-16 08:42:51
430
原创 图表工具 ECharts vs Chart.js 对比
ECharts和Chart.js是两大主流前端图表库,各具特色。ECharts由百度开发,提供丰富图表类型(含地图和复杂交互),适合大数据量和企业级应用,但配置较复杂;Chart.js社区驱动,轻量易用,适合简单图表和快速开发。在Vue项目中,两者均有专用封装(vue-echarts/vue-chartjs)。选择建议:复杂可视化用ECharts,轻量需求选Chart.js。
2025-06-14 11:13:18
691
原创 不同的数据库操作方式:MongoDB(NoSQL)和 MySQL/SQL
本文对比了 MongoDB 和 MySQL 两种数据库在用户查询与更新操作中的不同写法。MongoDB 采用异步 await 语法,使用 findOne 和 updateOne 方法进行 JSON 数据操作,而 MySQL 采用回调函数或 async/await 执行 SQL 查询。优化建议包括增加错误处理、改用 Promise 风格及使用 ORM 工具。关键区别在于:MongoDB 适合非结构化数据,语法更灵活;MySQL 适合结构化数据,需注意 SQL 注入防护。推荐写法均采用 try/catch 进行
2025-06-02 00:46:48
927
原创 数据库 MongoDB (NoSQL) 与 MySQL (SQL) 的写法对比
摘要:MongoDB(NoSQL)与MySQL(SQL)数据库在结构和操作上存在显著差异。MySQL采用表格结构,需预定义模式,使用SQL语言;MongoDB采用文档存储(BSON),无需预定义模式。对比显示MongoDB在数据模型灵活性、扩展性和JSON支持方面优势明显,适合非结构化数据和敏捷开发;而MySQL在事务支持、复杂查询和数据完整性方面更强,适合结构化数据和高一致性要求场景。实际应用中可根据需求选择或混合使用两种数据库技术。
2025-06-02 00:39:30
497
原创 res.json() vs res.send() 的区别
Express.js 中 res.json() 与 res.send() 的区别 res.json() 和 res.send() 都是 Express.js 的响应方法,主要区别在于数据处理方式: res.send() 自动推断 Content-Type,支持字符串、JSON 和 Buffer 等数据类型; res.json() 强制设置 Content-Type 为 JSON,无论输入类型如何都会转为 JSON 格式。 使用建议: 明确返回 JSON 时优先用 res.json()(如 API 响应) 需
2025-06-01 23:29:23
548
原创 Redis 存储邮件验证码的完整代码
本文介绍了一个基于Redis和Node.js实现的高性能邮件验证码系统。系统通过Redis存储验证码并设置过期时间,包含发送验证码和验证接口。关键功能包括:防刷机制限制60秒内只能发送一次、验证码5分钟有效、IP限流防止滥用。文章还提供了安全增强选项如加密存储验证码,以及生产环境部署建议如Redis密码认证和持久化配置。该系统具备高性能、防刷能力和生产级可靠性,适用于各种需要邮件验证的场景。
2025-06-01 23:18:27
348
原创 邮件验证码存储推荐方式
摘要: 邮件验证码存储推荐使用 Redis,因其具备高性能、自动过期(TTL)、原子性操作及分布式支持等优势。对比内存(Map)易丢失、数据库性能低等缺点,Redis 通过 SETEX 命令存储验证码并设置有效期,结合加密存储和防刷策略(如限制尝试次数)可显著提升安全性。生产环境中建议配置 Redis 集群和高可用方案,并遵循 业务前缀:唯一标识 的键名设计规范。完整流程示例涵盖发送、验证及防刷逻辑,适用于绝大多数高并发场景。其他方案(如内存或数据库)仅推荐用于开发测试或特定需求场景。
2025-06-01 23:05:26
1123
原创 Cursor 中三个选项 Agent 、 Ask 和 Manual 含义
Cursor提供三种AI交互模式:Agent模式让AI主动处理代码任务(如生成/重构代码);Ask模式需手动提问获取AI建议;Manual模式则完全关闭AI功能。推荐根据需求选择:Agent适合自动化操作,Ask适合针对性提问,Manual适合纯手动编程。各模式切换灵活,满足不同开发场景需求。(149字)
2025-06-01 16:05:54
3090
原创 Css样式中设置gap: 12px以后左右出现距离问题解析
摘要: 问题现象是flex布局的gap属性在单子元素容器中产生了间距,原因在于框架默认添加的::before/::after伪元素被gap识别为子节点。通过开发者工具可验证伪元素存在,导致.el-input与伪元素间各产生12px间距。解决方案包括:1) 清除伪元素布局影响(推荐用display:none);2) 改用margin-left替代gap控制间距。该问题常见于Element-UI等框架的表单项布局场景。(150字)
2025-05-30 17:16:27
912
原创 微信扫码登录 - 公众号网页授权,总结(二)返回指定页面
本文介绍微信扫码登录公众号网页授权的回调处理流程,重点说明如何根据授权状态返回不同页面。核心步骤包括:1) 校验授权完整性,判断是否获取用户信息权限;2) 检查是否为匿名用户;3) 查询用户是否关注公众号;4) 根据判断结果返回对应的HTML页面(授权失败页/未关注页/已关注页)。文中提供了完整的代码实现,包括用户信息获取、关注状态检查和页面返回逻辑,并附有流程图说明整个判断流程。通过该方案可实现针对不同授权状态的差异化页面展示。
2025-05-27 11:56:47
310
原创 微信扫码登录 - 公众号网页授权,总结(一)成功返回聊天界面
本文总结了微信扫码登录的实现流程:1) 后端生成带授权链接的二维码;2) 用户扫码后通过微信授权获取用户信息;3) 回调处理逻辑包括获取access_token、查询用户数据或注册新用户;4) 最终返回自动关闭页面。关键点包含二维码生成、OAuth2授权、用户信息获取及数据库操作,通过WebSocket实现前后端登录状态同步,完成闭环登录流程。
2025-05-27 11:43:16
408
原创 解决 Tailwind CSS 代码冗余问题
Tailwind CSS 虽然功能强大,但容易导致 HTML 类名冗长和代码冗余。为解决这一问题,可以采取多种策略:使用 @apply 指令提取重复样式、创建可复用组件、借助编辑器插件优化开发体验、启用 JIT 模式提升性能、自定义工具类以满足特定需求、使用 clsx 或 classnames 库动态管理类名,以及定期重构和抽象代码。其中,定期维护和升级是确保代码简洁高效的关键。通过这些方法,可以有效减少 Tailwind CSS 的冗余问题,提升代码可读性和可维护性。
2025-05-18 19:15:08
454
原创 Vue 中生成源码映射文件,配置 map
在Vue.js项目中,开启开发环境的源码映射(source map)可以通过修改vue.config.js文件来实现。具体步骤如下: 配置vue.config.js:在项目根目录新建或修改vue.config.js文件,添加以下代码: const { defineConfig } = require('@vue/cli-service') module.exports = defineConfig({ transpileDependencies: true, configureWebpack: { devt
2025-05-18 04:04:33
401
原创 Flowbite 和 daisyUI 那个好用?
Flowbite 和 daisyUI 是基于 Tailwind CSS 的组件库,各有特色。daisyUI 上手简单,支持多主题切换,适合快速开发和轻量项目;Flowbite 设计更正式,组件丰富,适合企业级应用。daisyUI 天然兼容 Vue,Flowbite 需额外插件。两者社区活跃,但 Flowbite 更新更频繁。选择取决于项目需求:daisyUI 适合个人项目和快速迭代,Flowbite 更适合企业官网和管理后台。
2025-05-17 15:29:48
866
原创 Vue 2 项目中配置 Tailwind CSS、Font Awesome和daisyUI
在 Vue 2 项目中配置 Tailwind CSS 的步骤如下:首先,通过 npm 安装 tailwindcss@^2.2、postcss@^7 和 autoprefixer@^9 依赖。接着,使用 npx tailwindcss init 创建 Tailwind 配置文件(可选)。然后,在 src/assets 目录下新建 tailwind.css 文件,并添加 @tailwind 指令。之后,在项目根目录创建 postcss.config.js 文件,配置 Tailwind 和 Autoprefixe
2025-05-12 22:39:27
801
原创 为什么Vue项目中没有设置process.env但是还是可以获取
构建工具环境变量写法获取方式Vue CLIVUE_APP_ViteVITE_内建变量NODE_ENV都能访问到(Vite 模拟)
2025-05-04 00:22:12
476
原创 Nginx搭建test服务器
Ctrl + O 保存,Enter 确认,Ctrl + X 退出。新建目录,Git拉取项目代码,安装上插件包。创建域名:test.xxxxx.com。中添加配置文件,通过软链接放入。就可以控制自己的代理服务了。修改配置文件“服务器接口”所有已安装模块的配置存放处。建一个反向代理服务,在。
2025-05-02 18:57:07
817
原创 解决在Mac上无法使用“ll”命令
在 macOS 上,ll命令是一个常见的别名,它通常是指向ls -l的。但是,如果你看到,这意味着你当前的zsh配置中没有设置ll作为别名。
2025-04-30 15:50:43
1220
原创 Vue 对话框出现时,为什么滚动鼠标还是能滚动底层元素
在 Vue 中,当对话框(如Dialog组件)出现时,底层页面仍然可以滚动,通常是因为对话框未正确阻止底层内容的滚动行为。解决这个问题的常见方法是通过控制页面的overflow样式来禁用底层内容的滚动。
2025-04-28 18:19:14
480
原创 Vue开发网站会有“#”原因是前端路由使用了 Hash 模式
网站链接中出现(井号)是因为你的前端路由使用了Hash 模式(hash mode),这是一种前端框架(如 Vue.js、React 等)中常用的路由策略。
2025-04-24 18:49:56
821
原创 JSAPI支付和小程序支付
JSAPI 支付是“微信网页内”的支付;小程序支付是“小程序内”的支付。虽然底层统一调用的是微信支付系统,但接入方式和使用环境不同。
2025-04-20 01:02:22
592
原创 小程序所有人都能登录,为什么还要添加 Token ?
首先这是个很好的问题,可以从 功能性 和 安全性 两方面来分析一下:如果:那确实可以不加 Token,也不会影响使用。标识用户身份做权限判断安全性考虑易于扩展你可以这样做:这样就像“发给每个人一个通行证”,哪怕啥都不做,以后也能追踪到:总结是否需要 Token?说明可以不加如果所有用户都一样、也不做身份相关操作建议加哪怕只是游客,也利于扩展、安全和身份标识但个人最后的建议是,一定要加!!!!推荐 用 openid + token 标记身份 方式添加。如果是综合系统
2025-04-17 18:59:23
469
原创 小程序接口使用时,HttpOnly cookie 中的 sameSite 设置什么最合适
是设置 Cookie 的一个安全属性,用来防止。它是SameSite的三种取值之一。SameSite。
2025-04-15 22:04:44
301
原创 小程序获取用户总结(全)
说实在话,小程序的开发团队真的需要优化一部分人,这个接口前后都不知道改了几遍,这种关键接口反反复复搞,别说初学者,即便是做过小程序的人都头大,单是整理这个资料就花了很久的时间,是应该反省一下了。还有,小程序的开发社区,那是什么狗屎社区,基本没有起到解决问题的效果,大部分都是自己找资料解决。还有一些开发人员,自己做的一堆狗屎文档,解决不了问题还盛气凌人的态度,现在小程序成绩是前人的努力结果,并不是现在的你,坐着大办公室,整天不干正事,很多就是披着高校的皮,做事一点不靠谱!
2025-04-15 13:33:05
1437
Royal TSX 是一款跨平台的远程桌面和连接管理工具,专为 macOS 设计 它主要用于管理和连接到不同类型的远程计算机和服务
2024-12-31
Selenium-IDE 插件
2024-05-14
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅