From 2197294cce0ef3a23dff74c19aefa9a4186c32ce Mon Sep 17 00:00:00 2001 From: katelya Date: Thu, 4 Sep 2025 23:24:02 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=B7=BB=E5=8A=A0=E6=88=90=E4=BA=BA?= =?UTF-8?q?=E5=86=85=E5=AE=B9=E8=BF=87=E6=BB=A4=E5=8A=9F=E8=83=BD=E8=A1=A8?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E5=85=BC=E5=AE=B9=E6=80=A7=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=8C=87=E5=8D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增故障排除章节: - 详细说明表结构不兼容问题的解决方案 - 提供完整的SQL命令来重建兼容的user_settings表 - 包含数据验证和测试步骤 文档更新: - D1_MIGRATION.md: 添加表结构兼容性修复方案 - CLOUDFLARE_PAGES_ADULT_FILTER.md: 添加开关无法操作问题的解决方法 - 提供JSON格式设置数据的正确结构说明 解决问题: - 修复'获取用户设置失败'后仍无法操作开关的问题 - 确保与现有代码的完全兼容性 - 提供清晰的表结构和数据格式说明 --- CLOUDFLARE_PAGES_ADULT_FILTER.md | 61 ++++++++++++++++++ D1_MIGRATION.md | 103 ++++++++++++++++++++++++++++++- 2 files changed, 163 insertions(+), 1 deletion(-) diff --git a/CLOUDFLARE_PAGES_ADULT_FILTER.md b/CLOUDFLARE_PAGES_ADULT_FILTER.md index 660d08d..2bcb611 100644 --- a/CLOUDFLARE_PAGES_ADULT_FILTER.md +++ b/CLOUDFLARE_PAGES_ADULT_FILTER.md @@ -140,6 +140,67 @@ wrangler pages deploy .vercel/output/static --project-name katelyatv 2. 在 Cloudflare Pages Dashboard 中检查 Functions → D1 database bindings 3. 确保绑定的变量名为 `DB` +### 🚨 错误:功能正常但开关无法操作(重要修复) + +**问题描述**: +- 页面不再显示"获取用户设置失败"错误 +- 但成人内容过滤开关无法切换,点击无响应 + +**根本原因**: +数据库表结构与代码期望的格式不匹配 + +**完整解决方案**: + +#### 第一步:重建兼容表结构 + +在 Cloudflare D1 Console 中执行以下 SQL: + +```sql +-- 删除现有的不兼容表 +DROP TABLE IF EXISTS user_settings; + +-- 创建与代码完全兼容的表结构 +CREATE TABLE user_settings ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + username TEXT NOT NULL UNIQUE, + settings TEXT NOT NULL, + updated_time INTEGER NOT NULL +); + +-- 添加必要索引 +CREATE INDEX IF NOT EXISTS idx_user_settings_username ON user_settings(username); +CREATE INDEX IF NOT EXISTS idx_user_settings_updated_time ON user_settings(updated_time DESC); +``` + +#### 第二步:插入用户设置数据 + +```sql +-- 插入设置数据(请替换 'your_username' 为实际用户名) +INSERT INTO user_settings (username, settings, updated_time) VALUES ( + 'your_username', + '{"filter_adult_content":true,"theme":"auto","language":"zh-CN","auto_play":true,"video_quality":"auto"}', + strftime('%s', 'now') +); +``` + +#### 第三步:验证数据正确性 + +```sql +-- 验证数据插入成功 +SELECT * FROM user_settings WHERE username = 'your_username'; +``` + +#### 第四步:重新部署并测试 + +1. 在 Cloudflare Pages 中触发重新部署 +2. 清除浏览器缓存并重新登录 +3. 测试成人内容过滤开关功能 + +**重要说明**: +- `settings` 字段必须是有效的 JSON 字符串 +- `filter_adult_content` 为 `true` 表示开启过滤 +- `updated_time` 使用 Unix 时间戳格式 + ### 错误:构建失败 **可能原因**: diff --git a/D1_MIGRATION.md b/D1_MIGRATION.md index a546423..c943435 100644 --- a/D1_MIGRATION.md +++ b/D1_MIGRATION.md @@ -6,7 +6,108 @@ ### user_settings 表(成人内容过滤功能 - 必需) -这个表用于存储用户的个人设置,包括成人内容过滤开关: +这个表用于存储用户## 🔧 故障排除 + +### 1. "获取用户设置失败" 错误 + +**原因**:缺少 `user_settings` 表 +**解决**:执行上述迁移SQL,确保user_settings表已创建 + +### 2. "表已存在" 错误 + +**原因**:表已经创建过了 +**解决**:这是正常的,`CREATE TABLE IF NOT EXISTS` 语句是安全的 + +### 3. 外键约束错误 + +**原因**:users表不存在或结构不匹配 +**解决**:确保先运行完整的 `./scripts/d1-init.sql` 初始化脚本 + +### 4. 🚨 表结构不兼容问题(重要修复) + +**问题描述**:即使表创建成功,仍然显示"获取用户设置失败",开关无法操作 + +**原因**:代码期望的表结构与创建的表结构不匹配 + +**完整解决方案**: + +#### 第一步:重建兼容的表结构 + +在 Cloudflare D1 Console 中执行: + +```sql +-- 删除现有表,重新创建完全兼容的结构 +DROP TABLE IF EXISTS user_settings; + +-- 创建与代码完全匹配的表结构 +CREATE TABLE user_settings ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + username TEXT NOT NULL UNIQUE, + settings TEXT NOT NULL, + updated_time INTEGER NOT NULL +); + +-- 创建索引 +CREATE INDEX IF NOT EXISTS idx_user_settings_username ON user_settings(username); +CREATE INDEX IF NOT EXISTS idx_user_settings_updated_time ON user_settings(updated_time DESC); + +-- 插入用户设置(JSON格式,替换为您的用户名) +INSERT INTO user_settings (username, settings, updated_time) VALUES ( + 'your_username_here', + '{"filter_adult_content":true,"theme":"auto","language":"zh-CN","auto_play":true,"video_quality":"auto"}', + strftime('%s', 'now') +); +``` + +#### 第二步:验证数据插入 + +```sql +-- 验证设置是否正确插入 +SELECT * FROM user_settings WHERE username = 'your_username_here'; +``` + +#### 第三步:确认环境变量 + +在 Cloudflare Pages → Settings → Environment variables 中确认: + +``` +NEXT_PUBLIC_STORAGE_TYPE = d1 +USERNAME = your_username_here +PASSWORD = your_password_here +``` + +#### 第四步:确认 D1 绑定 + +在 Cloudflare Pages → Settings → Functions → D1 database bindings: +- **Variable name**: `DB` +- **D1 database**: 选择您的数据库 + +#### 第五步:重新部署并清除缓存 + +1. 在 Cloudflare Pages → Deployments 中点击 "Retry deployment" +2. 清除浏览器缓存(Ctrl+Shift+Delete) +3. 重新登录并测试功能 + +**表结构说明**: + +| 字段名 | 类型 | 说明 | +| -------------- | ------- | --------------------------------------- | +| `id` | INTEGER | 主键,自动递增 | +| `username` | TEXT | 用户名,必须与 users 表中的用户名匹配 | +| `settings` | TEXT | 用户设置的 JSON 字符串 | +| `updated_time` | INTEGER | 更新时间戳(Unix 时间戳) | + +**settings JSON 格式**: + +```json +{ + "filter_adult_content": true, // 成人内容过滤开关 + "theme": "auto", // 主题设置 + "language": "zh-CN", // 语言设置 + "auto_play": true, // 自动播放 + "video_quality": "auto" // 视频质量 +} +```: ```sql -- 创建用户设置表(成人内容过滤功能)