快捷菜单
常用功能一站直达
更多功能请点顶栏「快捷菜单」

将Twikoo评论替换为轻量自建评论
1目前的评论有点重感觉,能不能依赖eo eo的Makers的kv/blob,eo边缘函数,七牛云对象存储,我的博客后台等,自建一个轻量的博客评论,只要满足能邮箱/钉钉接收消息,评论人工审核,后台删除、回复评论等等 常用的基本功能就好,不然目前的twikoo评论出现在首页,总感觉要刷新一会儿儿才能完全显示最新评论,很不友好。请先规划方案是否可行。结论:可行,而且你仓库里已经有大半后端雏形。 不必从零搭一套 Twikoo,更现实的是在 OneBlog Admin(EO Pages Functions + KV)上做一套轻量评论,替换首页/文章对 Twikoo SDK 的依赖。
| 现状 | 问题 |
|---|---|
Twikoo 跑在独立 EO(twikoo.onedayxyy.cn,KV+Blob) | 首页「最新评论」依赖 twikoo.getRecentComments() + CDN SDK |
| 主题懒加载(首页约 200ms~移动端 2.5s)+ session 缓存 | 首屏要等 SDK 就绪,体感「刷一会儿才出来」 |
| 审核/通知在 Twikoo 面板 | 和 OneBlog 后台割裂 |
| Admin 里已有 ~900 行 Waline 风格 KV 评论代码 | 路由被硬关掉,且 edgeone.json 未绑 WALINE_KV |
根因不只是「Twikoo 重」,而是:首页为了几条评论去拉整套评论 SDK。
| 组件 | 建议用法 | 可行性 |
|---|---|---|
| EO Makers + 边缘函数 | 评论 API 挂在现有 oneblog-admin(或独立小项目) | ✅ 已有部署链 |
| EO KV | 评论正文、按页索引、recent 索引、审核状态 | ✅ 已有 comment:{id} / 索引设计 |
| EO Blob | 可选;小评论用 KV 即可,Blob 留给导出/附件 | ⚠️ 非必须 |
| 七牛 | 评论配图/头像;不适合当主库(列表/审核/recent 要扫对象太贵) | ✅ 图床复用即可 |
| 博客后台 | 审核、删除、回复、通知配置 | ✅ JWT + 菜单已有,缺真正 CRUD UI |
| 邮箱 / 钉钉 | 新评论通知;EO 上勿用 QQ SMTP,用 Resend/SendGrid 或钉钉机器人 | ✅ 代码/运维经验都有 |
1访客博客页 / 首页
2 └─ 极薄 comment-widget.js(fetch,无 Twikoo SDK)
3 │
4 ▼
5OneBlog Admin EO Functions
6 POST/GET /api/comments/* 公开:提交、按 path 列表、recent
7 /api/admin/comments/* 鉴权:审核、删除、回复、设置
8 │
9 ├─ COMMENT_KV(或复用/扩展 ADMIN_KV 独立前缀)
10 │ comment:{id}
11 │ index:page:{path}
12 │ index:recent
13 │ index:pending
14 │
15 ├─ 钉钉 Webhook(关键词「评论」)
16 ├─ 邮件(Resend / SendGrid)
17 └─ 七牛(可选上传,URL 写进评论字段)数据放 KV,不放七牛主存。 七牛只当附件;Blob 仅在你要「整站评论 JSON 导出备份」时用。
访客端
path 列表 + 楼中楼回复GET /api/comments/recent?limit=5(可缓存 30~60s)pending,通过后才公开展示管理端(OneBlog)
刻意不做(控制体量)
waline/ 404 闸门,绑独立 KV,或改成 /api/comments 自有协议优点: 审核/邮件/索引代码已在 [[default]].js
缺点: 要清死代码、对齐 API、补 Admin Vue 页
oneblog-comment优点: 和后台解耦、故障隔离
缺点: 多一套部署与鉴权
getRecentComments,或关首页评论卡优点: 改动小
缺点: 不解决「重 + 审核割裂」,只是缓解
你要的是自建轻量评论 → 选 A;若怕碰大文件 [[default]].js → 选 B。
list 全库;现有 Waline 代码已按此思路写。oneblogadmin 要配好 CORS 与鉴权边界(公开读/写 vs Admin JWT)。[[default]].js 过大:A 路径建议把评论抽到 functions/lib/comments.js,避免继续堆巨型文件。| 阶段 | 内容 | 量级 |
|---|---|---|
| 1 | KV 绑定 + 公开/管理 API + 审核状态机 | 2~4 天 |
| 2 | 钉钉 + 邮件通知 | 0.5~1 天 |
| 3 | 主题 widget + 替换 recent-comments | 1~2 天 |
| 4 | Admin 评论管理页 | 1~2 天 |
| 5 | Twikoo 数据迁移 + 灰度切换 | 1 天 |
| 可选 | 七牛评论配图 | 0.5 天 |
整体大约 一周量级(熟悉仓库的话可更短),比维护完整 Twikoo 更可控。
provider = 'oneblog' 双轨,首页 recent 先切自建,文章页确认稳定后再下 Twikoo。如果你认可这个方向,下一步可以细化成:API 字段表、KV key 设计、和 Twikoo 字段映射,以及 Admin / 主题改动的文件清单(仍先设计、不动代码)。
轻量自建评论已落地,首页「最新评论」不再依赖 Twikoo SDK。
🟢已完成
后端(OneBlog Admin EO)
oneblog-admin/functions/lib/comments.js:公开提交/列表/recent + 后台审核/删除/回复/设置/api/comments/*;edgeone.json 增加 COMMENT_KV(未绑定时回退 ADMIN_KV 的 cmt: 前缀)主题前端
oneblog-comment.js + 样式:文章页轻量评论框recent-comments.js:provider=oneblog 时直接 fetch API,秒开、无 Twikoo 等待services.toml 已切到 provider = 'oneblog'后台
🟢你需要做的
oneblog-admin 绑定 KV 命名空间 COMMENT_KV(推荐独立库;不绑也能先靠 ADMIN_KV 跑)切回 Twikoo:主题配置里把 comment.provider 改回 twikoo 即可。旧 Twikoo 数据不会自动迁移;需要的话可以再加导入脚本。
🟢自己配置下即可

🟢体验
博客首页抓心时间的确变短了哈哈哈,nice。😘😘😘
🟢问题
这个评论目前好像没获取评论者邮箱头像哦,请解决
🟢回答
已修好并推送。
原因: 服务端邮箱 MD5 算错了,Cravatar 一直落到默认灰头像;QQ 邮箱也没走 QQ 头像接口。
改动:
数字@qq.com / 昵称为 QQ 号 → 用 q1.qlogo.cnreferrerpolicy="no-referrer",减少 QQ 头像防盗链失败Admin 部署完成后刷新留言区即可;2675263825@qq.com 这类应直接显示 QQ 头像。
🟢效果

🟢问题
我想批量删除这些待审核的垃圾评论,请增加这个功能。
🟢回答
已加上并推送。Admin 部署后刷新评论页即可用:
勾选后点「批量删除」,或直接用「清空当前待审核」。
🟢效果

精选 · 友链 · 更多

One的公众号
爱折腾博客的小白