随笔杂谈 | Waline用户列表加载失败
434 字
2 分钟
随笔杂谈 | Waline用户列表加载失败
前言
前几天登录博客的评论系统waline,发现用户列表加载不出来,打开网络调试器发现请求接口返回500,一直是以为我数据库出错了,连续换了几个类型的数据库(MongoDB,SQLite,PostgreSQL),后来又尝试换了部署平台从Vercel换到了Netlify,所有情况都试遍了,仍然加载不出用户列表。

排查
尝试了众多方法无果之后,我在想是不是waline server端的代码本身出了问题,于是就去翻看了一下他们官方的源代码,打开 packages/server/src/controller/user.js,定位到用户列表接口 getAction 里生成头像的这一行:
user.avatar ||= await think.service('avatar').stringify(user);再看 avatar 服务内部的模板:
{%- elif qqMailExp.test(mail) -%} ...{{mail|replace('@qq.com', '')}}...{%- else -%} https://seccdn.libravatar.org/avatar/{{mail | trim | lower | md5}}{%- endif -%}模板取的是 mail 字段,但 user 表里邮箱字段叫 email,不叫 mail。直接把 user 对象传进去,模板里 mail 是 undefined,执行 mail|replace(...) 时报错:
TypeError: Cannot read properties of undefined (reading 'replace')跟控制台报错完全对上。跟数据库类型、部署平台没有任何关系。
定位根因
全局搜了一下项目里所有调用 avatar 服务的地方,发现 token.js(登录)和 base.js(评论列表)在处理同一张 user 表时,都做了字段映射:
await think.service('avatar').stringify({ mail: user.email, nick: user.display_name, link: user.url,});只有 user.js 这一处漏了映射,直接传了原始对象。是官方代码里孤立的一处遗漏。
修复
把 user.js 改成和另外两处一致的写法:
user.avatar ||= await think.service('avatar').stringify({ mail: user.email, nick: user.display_name, link: user.url,});重新部署waline服务,用户列表恢复正常。
小结
最后改完之后也是把修复补丁重新pr回上游了。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
随笔杂谈 | Waline用户列表加载失败
https://blog.liao-ke.com/posts/waline-bugfix/相关文章智能推荐
1
方案分析 | 博客框架的选择
方案分析从静态博客与动态博客的架构差异出发,对资源占用、部署方式、运维成本与可扩展性做对比,并给出 WordPress/Typecho/Halo 与 Hexo/Hugo/Jekyll/Astro 等常见框架的选择建议。
2
学习笔记 | Hugo自动修正文章最后修改时间的最佳方案
学习笔记面向 Serverless/CI 自动部署场景,分析 Hugo 获取 lastmod 的几种方式(:filemodtime/:git/lastmod/date)的坑点,并给出“用 Git 提交时间回写文件时间戳 + :filemodtime”的稳定方案与脚本思路。
3
随笔杂谈 | 我的第一个开源 PR:适配 APatch 的 gbl_root_canoe 兼容性修复
随笔杂谈记录在一加15T上折腾ESP分区漏洞Root方案时,发现模块在APatch上WebUI初始化失败的问题,通过阅读源码定位原因并提交修复,完成了自己的第一个开源项目Pull Request。
4
开发日记 | AutoGlm:用 Chaquopy 把 AI 控制手机的 Python 项目搬进安卓 APP
开发日记记录将 Open-AutoGLM 这套基于 ADB 的手机自动化控制系统,通过 Chaquopy 嵌入式 Python 和自制 libadb.so 移植进安卓原生 APP 的开发过程与踩坑经历。
5
学习笔记 | 简单设计一个OAuth认证回调服务器
学习笔记使用 Cloudflare Worker 实现一个无状态的 GitHub OAuth 回调服务器,完成 code 换取 access_token,并通过自定义 App Scheme 返回移动端,分析这种方案的实现原理、优缺点及适用场景。
随机文章随机推荐

