docs: 添加成人内容过滤功能表结构兼容性修复指南

新增故障排除章节:
- 详细说明表结构不兼容问题的解决方案
- 提供完整的SQL命令来重建兼容的user_settings表
- 包含数据验证和测试步骤

 文档更新:
- D1_MIGRATION.md: 添加表结构兼容性修复方案
- CLOUDFLARE_PAGES_ADULT_FILTER.md: 添加开关无法操作问题的解决方法
- 提供JSON格式设置数据的正确结构说明

 解决问题:
- 修复'获取用户设置失败'后仍无法操作开关的问题
- 确保与现有代码的完全兼容性
- 提供清晰的表结构和数据格式说明
This commit is contained in:
katelya
2025-09-04 23:24:02 +08:00
parent 9a5564b3cf
commit 2197294cce
2 changed files with 163 additions and 1 deletions
+61
View File
@@ -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 时间戳格式
### 错误:构建失败
**可能原因**
+102 -1
View File
@@ -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
--