docs: 添加成人内容过滤功能表结构兼容性修复指南
新增故障排除章节: - 详细说明表结构不兼容问题的解决方案 - 提供完整的SQL命令来重建兼容的user_settings表 - 包含数据验证和测试步骤 文档更新: - D1_MIGRATION.md: 添加表结构兼容性修复方案 - CLOUDFLARE_PAGES_ADULT_FILTER.md: 添加开关无法操作问题的解决方法 - 提供JSON格式设置数据的正确结构说明 解决问题: - 修复'获取用户设置失败'后仍无法操作开关的问题 - 确保与现有代码的完全兼容性 - 提供清晰的表结构和数据格式说明
This commit is contained in:
@@ -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
@@ -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
|
||||
-- 创建用户设置表(成人内容过滤功能)
|
||||
|
||||
Reference in New Issue
Block a user