iTest 音频转录器调试与解决复盘

用户脚本 iTest 音频转录器 调试与解决复盘 1. 初始问题描述 用户创建了一个 Tampermonkey 脚本,旨在 iTest 网站上,利用 vosk-browser 库对听力音频进行离线语音识别。脚本在运行时抛出 TypeError: Vosk.Recognizer is not a constructor 的错误,导致转录功能完全失败。 2. 问题分析与调试历程 整个调试过程可以分为几个关键阶段,每个阶段都基于上一个阶段的错误信息进行了新的假设和尝试。 阶段一:初步诊断 - 错误的 API 调用对象 错误信息: TypeError: Vosk.Recognizer is not a constructor 原始代码: new Vosk.Recognizer({ sampleRate: ... }); 分析与假设: 这个错误表明 Vosk.Recognizer 不是一个有效的构造函数。根据许多现代JS库的设计模式(例如 Chart.js),通常会从一个父实例(如模型实例)上创建子组件(如识别器)。因此,我们假设 Recognizer 构造函数应该在 model 实例上。 尝试的解决方案: 将代码修改为 new model.Recognizer({ sampleRate: ... }); 结果: 失败。新的错误信息出现。 阶段二:二次诊断 - API 签名错误 错误信息: TypeError: model.Recognizer is not a constructor 分析与假设: 这个新错误否定了阶段一的假设。这说明 Recognizer 构造函数既不在全局的 Vosk 对象上,也不在 model 实例上。此时,我们重新审视了 vosk-browser 较新版本的文档,发现一个可能的正确用法:构造函数是 Vosk....

2025-08-05 · 2 min

passion-vision 项目问题与解决复盘

passion-vision 项目问题与解决复盘 1. Cloudflare Worker 静态资源与图片接口 问题:前端静态资源、图片 404 或 MIME 错误。 解决:所有 dist/assets 下静态资源上传到 R2,worker 静态路由根据扩展名设置 Content-Type。 2. /api/image 接口图片未命中 问题:/api/image 返回 placeholder,R2 命名与 query/md5 映射不一致。 解决:明确图片应按 md5(query).jpg 缓存到 R2,worker 端严格按此规则查找。 3. Unsplash 拉取失败 问题:worker 端未配置 UNSPLASH_ACCESS_KEY,导致 fallback 失败。 解决:wrangler.toml 添加 [vars] UNSPLASH_ACCESS_KEY,重新部署。 4. R2 公网直链 403/401 问题:R2 S3 API 直链需公开读权限,未设置时返回 Authorization 错误。 解决:如只需私有访问,worker 端直接代理图片内容,不暴露直链。 5. worker 图片接口行为与本地 Express 不一致 问题:worker /api/image 直接返回图片二进制,Express 返回 JSON。 解决:worker 拆分为 /api/image(返回 JSON,url 字段为 /api/images-proxy 代理链接)和 /api/images-proxy(返回图片二进制),与本地风格一致。 6....

2025-08-05 · 1 min

项目开发复盘报告:题库适配器与平台迁移

好的,这是一份经过整理和条理化的复盘报告,涵盖了您提供的所有内容。 项目开发复盘报告:题库适配器与平台迁移 本文档旨在系统地复盘“为 tikuAdapter 新增适配端点”任务从初期开发、环境配置、数据兼容性处理,直至最终平台迁移与自动化部署的完整过程。报告详细记录了关键任务、遇到的问题、解决方案及宝贵的经验教训。 I. 核心API端点开发与初期问题解决 1.1 任务目标 创建一个新的 API 端点 /tikuAdapter,该端点能够接收特定格式请求,调用外部题库 API (api.tikuhai.com),并将返回数据转换为 tikuAdapter 所需的 JSON 格式。 1.2 已完成工作 新增 /tikuAdapter 端点:在 src/app.js 中成功添加了路由和 handleTikuAdapterSearch 处理函数。 实现数据格式转换:在 handleTikuAdapterSearch 中编写核心逻辑,将 api.tikuhai.com 的响应重组,包括保留 question 和 options,并动态生成 answerKey、answerIndex、answerKeyText 和 answerText 等字段。 1.3 遇到的问题及解决方案 问题一:服务器连接重置 现象: curl 测试时收到 (56) Recv failure: Connection was reset 错误。 分析: 服务器处理请求时意外终止或崩溃。 解决方案: 检查 request.log 日志文件,定位导致崩溃的具体异常。 问题二:处理 options 字段时的类型错误 现象: 日志显示 TypeError: Cannot read properties of undefined (reading 'indexOf')。 分析: 当客户端请求 JSON 不含 options 字段时,options 变量为 undefined,导致后续调用 indexOf 失败。 解决方案: 增加防御性编程:const options = data....

2025-08-05 · 3 min

项目开发复盘报告:题库适配器与平台迁移

好的,这是一份经过整理和条理化的复盘报告,涵盖了您提供的所有内容。 项目开发复盘报告:题库适配器与平台迁移 本文档旨在系统地复盘“为 tikuAdapter 新增适配端点”任务从初期开发、环境配置、数据兼容性处理,直至最终平台迁移与自动化部署的完整过程。报告详细记录了关键任务、遇到的问题、解决方案及宝贵的经验教训。 I. 核心API端点开发与初期问题解决 1.1 任务目标 创建-一个新的 API 端点 /tikuAdapter,该端点能够接收特定格式请求,调用外部题库 API (api.tikuhai.com),并将返回数据转换为 tikuAdapter 所需的 JSON 格式。 1.2 已完成工作 新增 /tikuAdapter 端点:在 src/app.js 中成功添加了路由和 handleTikuAdapterSearch 处理函数。 实现数据格式转换:在 handleTikuAdapterSearch 中编写核心逻辑,将 api.tikuhai.com 的响应重组,包括保留 question 和 options,并动态生成 answerKey、answerIndex、answerKeyText 和 answerText 等字段。 1.3 遇到的问题及解决方案 问题一:服务器连接重置 现象: curl 测试时收到 (56) Recv failure: Connection was reset 错误。 分析: 服务器处理请求时意外终止或崩溃。 解决方案: 检查 request.log 日志文件,定位导致崩溃的具体异常。 问题二:处理 options 字段时的类型错误 现象: 日志显示 TypeError: Cannot read properties of undefined (reading 'indexOf')。 分析: 当客户端请求 JSON 不含 options 字段时,options 变量为 undefined,导致后续调用 indexOf 失败。 解决方案: 增加防御性编程:const options = data....

2025-08-05 · 3 min