数据问题,不是代码问题:
- 后端已经正确:handleGetMe() 返回 invite_code ✅
- 前端已经正确:{user?.invite_code && (...)} 显示逻辑 ✅
- 数据有问题:老用户的 invite_code 在数据库中为 NULL ❌
只需一条 SQL 语句,修复数据库中的老用户记录
在 Neon PostgreSQL 控制台或任何 PostgreSQL 客户端运行:
UPDATE users
SET invite_code = upper(substr(md5(id || ':' || created_at::text || ':' || random()::text), 1, 20))
WHERE (invite_code IS NULL OR invite_code = '')
AND email IS NOT NULL;-
登录 Neon 数据库控制台
- 访问 https://console.neon.tech/
- 找到你的项目
- 打开 SQL Editor
-
运行脚本
# 或在本地用 psql 运行 psql $DATABASE_URL << 'EOF' UPDATE users SET invite_code = upper(substr(md5(id || ':' || created_at::text || ':' || random()::text), 1, 20)) WHERE (invite_code IS NULL OR invite_code = '') AND email IS NOT NULL; EOF
-
验证
-- 检查是否还有缺少邀请码的用户 SELECT COUNT(*) FROM users WHERE invite_code IS NULL OR invite_code = ''; -- 应该返回 0
更新前:
✅ 登陆响应返回 invite_code: ""(空)
❌ 邀请码不显示在 /profile 页面
更新后:
✅ 登陆响应返回 invite_code: "ABC123XYZ..."(有值)
✅ 邀请码正确显示在 /profile 页面
| 组件 | 状态 | 说明 |
|---|---|---|
| 后端 API | ✅ | handleGetMe() 已经在返回 invite_code 字段 |
| 前端逻辑 | ✅ | UserProfilePage 已经有 {user?.invite_code && (...)} |
| 部署 | ✅ | 前端在 Vercel,后端在 Replit |
| 数据 | ❌ | 老用户记录中 invite_code 为 NULL |
只需要修复数据,其他一切都正常工作!
这就是 "保持简单" 的力量:
- ❌ 不需要修改代码
- ❌ 不需要重新编译
- ❌ 不需要重新部署
- ✅ 只需要一条 SQL 语句
- ✅ 数据修复后立即生效
- ✅ 零停机时间
结果: 最小化复杂性,最大化效率。