# 内容创建问题修复说明 > 问题:souladmin 添加内容后显示「创建成功」,但目录和数据库未增加,前端也未显示。 ## 根因分析 1. **两套后台数据源不一致** - souladmin.quwanzhi.com 调用 soulapi.quwanzhi.com(Go API) - soul.quwanzhi.com/admin 使用 Next.js API,list 此前仅从 bookData(静态)读取 - 新建章节写入数据库,但 list 不查库,导致新建内容不显示 2. **PUT 创建未完整支持 partId/chapterId** - 新建章节时 partId、chapterId、partTitle、chapterTitle 未正确写入数据库 ## 已做修复 ### 1. 修改 `/api/db/book` list 接口 - **原逻辑**:仅从 bookData 读取 - **现逻辑**:优先从数据库 chapters 表读取,再与 bookData 合并 - **效果**:新建章节会立即出现在列表中 ### 2. 修改 PUT 接口支持新建章节 - 支持 body 传入 `partId`、`chapterId`、`partTitle`、`chapterTitle`、`isFree` - 新建章节能正确写入数据库 ### 3. 在 book-data 中新增 9.15 - 章节 ID: 9.15 - 标题: 第102场|今年第一个红包你发给谁 - 文件: book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.15 第102场|今年第一个红包你发给谁.md ### 4. soul-admin 改用 soul.quwanzhi.com 作为 API - 修改 soul-admin 的 API 基址:soulapi → soul.quwanzhi.com - 在 Next.js 中为 souladmin.quwanzhi.com 配置 CORS ## 部署步骤 ### 步骤 1:部署 soul 主站(小型宝塔) ```bash cd /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验 # 按 .cursorrules 中的流程执行 pnpm build # 然后执行部署脚本 ``` ### 步骤 2:同步 9.15 到数据库 部署后访问 soul.quwanzhi.com/admin,在内容管理页面点击「同步到数据库」,将包含 9.15 的 bookData 同步进库。 ### 步骤 3:部署修改后的 soul-admin(KR 宝塔) ```bash # 将 一场soul的创业实验-永平 中的 soul-admin/dist 上传到 KR 宝塔 cd /Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平 tar -czf soul-admin-dist.tar.gz soul-admin/dist sshpass -p 'Zhiqun1984' scp -P 22022 soul-admin-dist.tar.gz root@43.139.27.93:/tmp/ sshpass -p 'Zhiqun1984' ssh -p 22022 root@43.139.27.93 " cd /www/wwwroot/自营/soul-admin rm -rf dist.bak mv dist dist.bak 2>/dev/null || true tar -xzf /tmp/soul-admin-dist.tar.gz -C . rm /tmp/soul-admin-dist.tar.gz " ``` ### 步骤 4:校验 1. 打开 souladmin.quwanzhi.com/content 2. 新建章节,确认创建后列表中立即出现 3. 刷新 soul.quwanzhi.com 主站,确认新章节可读 ## 注意事项 - souladmin 现改为调用 soul.quwanzhi.com,不再调用 soulapi(Go),需确保 soul 主站可用 - 若仍需使用 Go API,需在 soul-api 源码中修复 list/create 逻辑 --- ## 内容上传 API(供科室/Skill 调用) - **地址**:`POST /api/content/upload` - **Content-Type**:`application/json` - **Body 字段**: - `title`(必填):节标题 - `price`:定价,默认 1 - `content`:正文(Markdown 或 HTML) - `format`:`markdown` | `html`,默认 `markdown` - `images`:图片 URL 数组;正文中可用 `{{image_0}}`、`{{image_1}}` 占位,会替换为对应图片的 Markdown 图链 - `partId`、`partTitle`、`chapterId`、`chapterTitle`:归属篇/章,可选 - `isFree`:是否免费,默认 false - `sectionId`:指定节 ID,不传则自动生成(如 `upload.标题slug.时间戳`) - **返回**:`{ success, id, message, title, price, isFree, wordCount }` - 写入数据库 `chapters` 表,list/目录会从库中读取并去重显示。