验证日期:2026-09-11。环境:macOS arm64、Go 1.26.4、Node 24、Chromium、Docker Desktop 29.7.2。以下为初次迁移时的验证结果,当时未部署线上服务、未向上游提交 PR。后续线上排错记录见文末。
| 验证 | 结果 |
|---|---|
go test -race -cover ./... |
通过,核心 internal/meting 语句覆盖率 83.8%;入口进程通过运行验证 |
go vet ./... |
通过 |
| 本地 Go 二进制 | 构建并运行通过 |
| Linux amd64 / CGO 关闭 | 构建通过,约 10 MB |
npm ci / npm test |
通过,6 组边缘适配测试;依赖审计 0 漏洞 |
npm run build |
配置和路由检查、可移植边缘 JS bundle 编译通过,无 Node 内置运行时依赖 |
npx edgeone validate |
官方 CLI 1.6.37 校验通过 |
| Docker | 使用官方镜像的 public.ecr.aws 镜像源构建通过;Docker Hub 默认入口在本机拉取超时;容器健康检查、真实歌曲和 206 音频请求通过 |
Go 测试包含五个原平台的 search/song/album/artist/playlist 映射、音频/封面/歌词协议、网易 EAPI 与百度 AES 固定向量、酷狗签名、QQ VKey、HMAC、字符串 ID、错误状态、Cookie 环境变量/文件/来源隔离。汽水覆盖数字 JSON ID 精度、分页去重、重复游标、空列表、试听标识、歌词起点与裁剪、音频缓存过期、Range/HEAD/416、失效重试、域名限制和加密资源拒绝。并发缓存验证合并请求、取消等待、取消主请求不影响健康等待者。
边缘测试包含显式过期、损坏 KV、无绑定/读写故障回退、Cookie 绕过、签名密钥与公开地址变化导致失效、资源鉴权先于缓存、清理入口鉴权、CDN 每跳域名检查、请求取消、失效重试、HEAD/206/416。8 MB 模拟音频在消费响应前尚未被完整读取,验证流式传递且没有写入 KV。
使用官方 CLI 的 Go Framework 源码转换器处理 core.go,确认生成 /core 前缀剥离代码,并编译转换后的本地与 Linux 二进制。转换后的入口实际返回:
/core/health:200。- 未带内部密钥的
/core/api、/core/resolve:401。 /api:404,验证它不占用公共边缘路由。- 携带正确内部密钥的
/core/api:200,返回真实汽水歌曲。
本地联调脚本使用相同的边缘业务代码与模拟 KV。真实歌曲请求依次返回 MISS/HIT,真实 CDN 音频返回 206 bytes 0-999/487359。未调用真实 EdgeOne KV。
官方 makers dev --skip-env-sync 仍要求登录,本次未登录或创建项目。generate-routes 在未运行平台构建时只生成 filesystem 路由,因此不把该输出当作完整部署验证。离线 bundle 和源码转换检查不等于真实 EdgeOne 项目构建、部署路由、地区或 KV 联通通过。
使用现有 everfu/MetingJS 构建和 APlayer,没有重写前端。
| 场景 | 结果 |
|---|---|
汽水单曲 7079108541549643812 |
《小半》标注试听;浏览器解码并播放,实际时长 30 秒 |
汽水歌单 7096700219496368135 |
22 首有序加载;前两首播放及切歌通过,实际均为 30 秒试听 |
| 暂停与拖动 | 暂停状态正确,拖到约 18 秒后继续播放 |
| 歌词 | 拖动前后当前歌词随片段时间变化;封面显示正常 |
| 本地边缘网关 | 单曲、歌单、暂停、拖动、切歌通过,使用模拟 KV |
| 390 px 移动端 | 播放器无横向溢出 |
| 自托管音频 | 3 秒本地 WAV 在实际播放器中播放通过 |
| 原平台字段入口 | 模拟标准 name/artist/url 元数据进入实际播放器并播放通过 |
| 错误提示 | 不可匿名播放信息正确显示 |
最初两次歌单导航期间,首首歌曲的一次音频请求返回 502,后续播放、切歌与连续三次 Range 请求均成功。取消请求隔离及连接设置调整后,最终 Go 浏览器回归的页面错误列表为空;保留此前瞬时失败记录,不保证上游始终可用。
| 平台 | 结果与限制 |
|---|---|
| 网易云 | 《海阔天空》元数据成功,浏览器实际播放 45 秒片段;不作为完整音频验证 |
| 《告白气球》元数据成功,匿名音频解析返回 404,浏览器播放未通过 | |
| 酷狗 | hello 搜索返回 30 条;本轮未验证真实音频播放 |
| 百度 | 上游调用失败,API 明确返回 500;模拟协议测试通过 |
| 酷我 | 上游未返回有效资源结构,API 明确返回 500;模拟协议测试通过 |
本轮没有将任何真实试听音频记为完整歌曲通过。完整音频分支使用模拟协议测试验证;真实完整音频、真实 EdgeOne 部署和真实 KV 联通仍未验证。
用户部署迁移版本后,线上预览链接实测:未带预览授权时 EdgeOne 返回 401(eo_time missing);带有效授权后根目录显示静态介绍页,/core/health 和 /core/demo 返回 404,公共 /api 返回 502。控制台构建已成功,但项目环境变量为空。
本次修复:
- 新增边缘根入口,静态介绍移到
/about.html,保留/api别名;Go 独立入口与签名资源链接同样使用根目录。 METING_URL改为可选;边缘函数从访问域名生成地址,仅通过经过内部鉴权的头部交给 Go。演示默认使用同域相对地址。- 预览授权仅向完全同源的
.edgeone.dev内部 Go 地址传递,不进入音乐/CDN 请求或 KV。配置缺失、平台拒绝访问及内部鉴权失败提供明确错误。 - KV 版本更新为
m2,避免读取旧资源地址,清理工具兼容旧版记录。
本次验证:Go 竞态测试、静态检查和二进制构建通过;9 组边缘测试及构建路由检查通过。新增测试覆盖根入口、兼容入口共享缓存、自动域名的内部鉴权边界、预览授权隔离及部署错误提示。Docker 使用官方镜像的 public.ecr.aws 源重新构建通过。
本地 Go(3334)和边缘联调(3335)的根目录、/api 均返回示例歌单 22 首;首首音频 Range 返回 206 和指定的 100 字节,边缘模拟 KV 返回 MISS/HIT。浏览器使用现有 MetingJS,通过根目录接口实际播放《Hora》约 30 秒试听并自动切至《かわいいひと》,后者时间推进到 25 秒且暂停成功。本次仍未验证真实完整音频。
控制台已保存 METING_EDGEONE=1,用户已填写两项随机密钥。按用户要求暂不绑定域名、不设置固定公开地址。首次自动部署启动日志报告密钥配置未满足要求;重新部署后的 dpcaztf4bqxn 已通过真实 /core/health 200 和根目录歌单接口 200。相同示例歌单在当前云端返回 6 首,本地返回 22 首;差异尚未进一步定位,不视为完整曲目一致性通过。真实 KV 联通仍未验证。
参照用户提供的 api.injahow.cn/meting 首页,根目录没有音乐参数时显示参数说明、六个平台、示例链接和汽水播放入口;携带 server/type/id/auth/token 时仍走 API,只有预览授权或 r 参数时仍显示说明页。/api 原默认行为保持不变。
线上演示空白的另一原因是原先引用 dist/Meting.min.js,而该构建文件没有提交到前端仓库,CDN 实测返回 404。现改用前端已提交版本的 src/Meting.js 固定提交地址,实测 200。本地浏览器使用该真实 CDN 文件成功加载 22 首及试听时长。10 组边缘测试、Go 竞态测试、静态检查与构建通过,新增首页/参数分流及前端资源路径回归测试。
真实 EdgeOne dpcaztf4bqxn 两条歌曲的 Range 请求均返回 206 和指定的 100 字节,其中一条音频总长 10,362,970 字节,确认大于云函数 6 MB 限制的资源仍由边缘函数代理。取得音频字节不等于浏览器完整播放验证。