diff --git a/docs/api/public/analytics.md b/docs/api/public/analytics.md index 255a5e6..66ca525 100644 --- a/docs/api/public/analytics.md +++ b/docs/api/public/analytics.md @@ -30,6 +30,13 @@ POST /api/analytics/visit } ``` +**请求头** + +| 名称 | 必填 | 示例 | +| -------------- | ---- | ---------------------------- | +| `Content-Type` | 是 | `application/json` | +| `X-Site-Id` | 否 | `blog` | + 字段说明: | 字段名 | 类型 | 必填 | 说明 | @@ -38,6 +45,12 @@ POST /api/analytics/visit | `postTitle` | string | 否 | 文章标题,用于后台展示页面名称 | | `postUrl` | string | 否 | 文章 URL,用于后台展示页面链接和域名统计 | +**请求头说明:** + +| 名称 | 必填 | 说明 | +| ---------- | ---- | -------------------------- | +| `X-Site-Id` | 否 | 站点 ID,用于多站点数据隔离,默认 `default` | + **成功响应** - 状态码:`200` diff --git a/docs/api/public/comments.md b/docs/api/public/comments.md index bc4aed2..7e32935 100644 --- a/docs/api/public/comments.md +++ b/docs/api/public/comments.md @@ -19,6 +19,7 @@ GET /api/comments | 名称 | 位置 | 类型 | 必填 | 说明 | | ----------- | ----- | ------- | ---- | ------------------------------------------ | | `post_slug` | query | string | 是 | 文章 slug,与前端 `CWDComments` 的 `postSlug` 参数对应 | +| `siteId` | query | string | 否 | 站点 ID,用于多站点数据隔离,默认 `default` | | `page` | query | integer | 否 | 页码,默认 `1` | | `limit` | query | integer | 否 | 每页数量,默认 `20`,最大 `50` | | `nested` | query | string | 否 | 是否返回嵌套结构,默认 `'true'` | @@ -136,6 +137,13 @@ POST /api/comments | -------------- | ---- | ---------------------------- | | `Content-Type` | 是 | `application/json` | +**请求头** + +| 名称 | 必填 | 示例 | +| -------------- | ---- | ---------------------------- | +| `Content-Type` | 是 | `application/json` | +| `X-Site-Id` | 否 | `blog` | + **请求体(Request Body)** ```json @@ -160,12 +168,18 @@ POST /api/comments | `post_title` | string | 否 | 文章标题,用于邮件通知内容 | | `post_url` | string | 否 | 文章完整 URL,用于邮件通知中的跳转链接 | | `name` | string | 是 | 评论者昵称 | -| `email` | string | | 是 | 评论者邮箱,需为合法邮箱格式 | +| `email` | string | 是 | 评论者邮箱,需为合法邮箱格式 | | `url` | string | 否 | 评论者个人主页或站点地址 | | `content` | string | 是 | 评论内容,内部会过滤 `` 片段 | | `parent_id` | number | 否 | 父评论 ID,用于回复功能;缺省或 `null` 表示根评论 | | `adminToken` | string | 否 | 管理员评论密钥,博主发布评论时需要先通过 `/api/verify-admin` 验证密钥后将密钥传入此字段,评论将直接通过且不受审核设置影响 | +**请求头说明:** + +| 名称 | 必填 | 说明 | +| ---------- | ---- | -------------------------- | +| `X-Site-Id` | 否 | 站点 ID,用于多站点数据隔离,默认 `default` | + **成功响应** - 状态码:`200` diff --git a/docs/api/public/config.md b/docs/api/public/config.md index 0910656..f66ec3a 100644 --- a/docs/api/public/config.md +++ b/docs/api/public/config.md @@ -14,6 +14,12 @@ GET /api/config/comments - 路径:`/api/config/comments` - 鉴权:不需要 +**查询参数** + +| 名称 | 位置 | 类型 | 必填 | 说明 | +| -------- | ----- | ------ | ---- | -------------------------- | +| `siteId` | query | string | 否 | 站点 ID,用于多站点数据隔离,默认 `default` | + **成功响应** - 状态码:`200` diff --git a/docs/common-problems.md b/docs/common-problems.md index 2a083c8..cb735c4 100644 --- a/docs/common-problems.md +++ b/docs/common-problems.md @@ -1,11 +1,11 @@ # 常见问题 -## 1. 为什么设置完 siteId 后,评论区没有显示评论数据? +## 1. 为什么设置完 siteId 后,评论区不显示旧的评论数据? 因为设置了 siteId 后,接口会根据 siteId 来查询数据库带有你设置的 siteId 的评论数据。所以如果设置了 siteId,旧数据就有可能不显示,需要手动去 Cloudflare D1 控制台 Query 运行 SQL 语句来更新数据。 -- `abc`: 你要设置的 siteId -- `example.com`: 查找包含指定域名的评论数据 +- `abc` 你要设置的 siteId +- `example.com` 查找包含指定域名的评论数据 ```sql UPDATE Comment diff --git a/docs/config/site-isolation.md b/docs/config/site-isolation.md index aaef78f..36da018 100644 --- a/docs/config/site-isolation.md +++ b/docs/config/site-isolation.md @@ -1,9 +1,92 @@ # 站点隔离 -配置支持站点数据隔离。 +CWD 评论系统支持通过 `siteId` 参数实现多站点数据隔离。当你需要为多个不同的网站或博客使用同一套评论系统后端时,可以通过 `siteId` 来区分不同站点的评论数据。 -通过前端实例调用时进行配置: +## 功能说明 +- **数据隔离**:每个 `siteId` 对应独立的评论数据,不同站点的评论互不干扰 +- **统一管理**:所有站点共用同一个后端 API 和管理后台,通过 siteId 进行区分 + +## 前端配置 + +在初始化评论组件时,通过 `siteId` 参数指定站点标识: + +```html +
+ + + ``` -``` \ No newline at end of file +### 参数说明 + +| 参数 | 类型 | 必填 | 说明 | +| --------- | ------ | ---- | -------------------------- | +| `siteId` | string | 否 | 站点标识符,用于隔离不同站点的评论数据 | + +### siteId 命名建议 + +- 使用小写字母、数字和连字符,如 `blog`、`docs`、`my-site-1` +- 避免使用特殊字符和空格 +- 建议使用有意义的名称,便于识别不同站点 + +## API 调用 + +当使用站点隔离功能时,所有公开 API 请求都需要在查询参数中携带 `siteId`: + +```javascript +// 获取评论列表 +GET /api/comments?post_slug=hello-world&siteId=blog + +// 提交评论 +POST /api/comments +{ + "post_slug": "hello-world", + "name": "张三", + "email": "zhangsan@example.com", + "content": "很棒的文章!" +} +// 请求头:X-Site-Id: blog + +// 获取配置 +GET /api/config/comments?siteId=blog +``` + +## 多站点示例 + +如果你有多个站点,可以为每个站点配置不同的 `siteId`: + +```html + + + + + + + +``` + +## 注意事项 + +[为什么设置完 siteId 后,评论区不显示旧的评论数据?](/common-problems.html#_1-为什么设置完-siteid-后-评论区不显示旧的评论数据) diff --git a/docs/guide/frontend-config.md b/docs/guide/frontend-config.md index 5f0f431..25115e5 100644 --- a/docs/guide/frontend-config.md +++ b/docs/guide/frontend-config.md @@ -28,7 +28,7 @@ CWD 评论组件采用 **Shadow DOM** 技术构建,基于独立根节点渲染 const comments = new CWDComments({ el: '#comments', apiBaseUrl: 'https://your-api.example.com', // 换成你的 API 地址 - siteId: 'your-site-id', // 换成你的站点 ID(关键词),比如 blog + siteId: 'blog', // 换成你的站点 ID(可选),如需多站点隔离请配置 }); comments.mount(); @@ -52,6 +52,7 @@ https://cwd.js.org/cwd.js | -------------- | ----------------------- | ---- | --------- | ---------------------------------------- | | `el` | `string \| HTMLElement` | 是 | - | 挂载元素选择器或 DOM 元素 | | `apiBaseUrl` | `string` | 是 | - | API 基础地址 | +| `siteId` | `string` | 否 | `default` | 站点 ID,用于多站点数据隔离 | | `theme` | `'light' \| 'dark'` | 否 | `'light'` | 主题模式 | | `pageSize` | `number` | 否 | `20` | 每页显示评论数 | | `customCssUrl` | `string` | 否 | - | 自定义样式表 URL,追加到 Shadow DOM 底部 |