博客系统自文档 · 第 2/16 篇
目录 · 上一篇:四端架构与请求链路 · 下一篇:评论、点赞与站内通知
写在前面
博客的「内容」不只是 Markdown 字符串,而是一套 文章 + 分类 + 标签 + 状态 + 机构 的数据模型,再叠加搜索、归档、RSS 等发现通道。
本篇讲读者怎么找到文章,以及开发者该看哪些表和路由。
功能与体验:读者如何发现内容
Web(blog-home-nuxt)
| 能力 | 路由 | 说明 |
|---|---|---|
| 首页列表 | / |
分页、置顶、排序 |
| 快速入口 | /explore |
归档、友链、留言、工具等聚合导航 |
| 搜索 | /search?q= |
标题/内容检索 |
| 归档 | /archives |
按年月聚合 |
| 分类 | /category/[id] |
每文 1 个 分类 |
| 标签 | /tag/[id] |
每文 多个 标签 |
| RSS | /feed.xml |
最近 50 篇,Nitro 路由 |
| 详情 | /detail/[id] |
Markdown 渲染、相关推荐、prev/next |
移动端(blog-home-uniapp)
| Web 路由 | uni-app 路由 | 说明 |
|---|---|---|
/ |
/pages/index/index |
首页列表 |
/explore |
/pages/explore/explore |
快速入口 |
/search |
/pages/search/search |
搜索 |
/archives |
/pages-blog/archives/index |
归档 |
/category/[id] |
/pages-blog/category/list?id= |
分类筛选 |
/tag/[id] |
/pages-blog/tag/list?id= |
标签筛选 |
/detail/[id] |
/pages/detail/detail?id= |
详情 |
/feed.xml |
— | 仅 Web(Nitro) |
详情页增强(2026-06)
- 相关推荐
ArticleRelated→GET /article/related?id=...&limit=6 - 同作者 prev/next
ArticleAdjacentNav→GET /article/info?id=...返回prev/next - 分享栏
ArticleShareBar— 传播与 SEO 辅助 - JSON-LD + canonical 利于 SEO
- 评论客户端分页加载(SSR 瘦身后侧栏懒加载)
- uni-app 详情页
src/pages/detail/detail.vue同步支持相关推荐、相邻导航;评论创建返回status供待审核提示
设计与实现
数据模型
erDiagram
article ||--o| category : "articles FK"
article }o--o{ tag : article_tags_tag
article ||--o| user : "uid / useArticles"
article {
int id PK
text title
longtext content
longtext contentHtml
enum status draft_publish_scheduled
datetime scheduledPublishAt
tinyint topping
varchar articles FK category
}
| 字段 | 含义 |
|---|---|
content |
Markdown 源码 |
contentHtml |
渲染 HTML(创建时必填) |
status |
draft / publish / scheduled |
articles |
分类 UUID(列名历史原因,不是复数语义) |
deptId |
作者机构,RBAC 数据范围,≠ 分类 |
关联表:article_tags_tag(articleId, tagId)。
创建与发布
- API:
POST /article/create(JWT),ArticleService.create - 校验:标题唯一、作者须有
deptId、分类与标签必填 - 定时发布:
status=scheduled+scheduledPublishAt,由scheduled-task定时扫描改publish - C 端 / admin 均提交
content+contentHtml
RSS 实现
feed.xml.ts 在 Nitro 层:
- 请求
${origin}/x-blog/api/v1/article/list(pageSize 50,生产 API 前缀与浏览器一致) - 解析响应
data.list(NestTransformInterceptor包装),组装 RSS 2.0 XML,link指向/detail/{id}
不经过 Nest 模板,部署时随 Nuxt 进程提供。仅 Web 端,小程序无 RSS。
prev/next 排序规则
同作者、已发布文章,按 置顶优先 + 时间降序 取相邻篇(见 ArticleService.findAdjacentArticles)。连载自文档可通过 SQL 控制 createTime 递增来串联。
踩坑与取舍
- 无「系列」实体:连载靠分类 + 标签 + 文内链接 + prev/next,不另建 series 表。
- about 页模式:
/about可硬编码加载某article.id当静态页(当前 id 44)。 - SQL 直写不触发 RPG 发文经验:自文档用 SQL 导入时无
ARTICLE_PUBLISHED事件。 - 发现能力以 Web 为 canonical:RSS、sitemap、JSON-LD 均在 Nuxt;uni-app 复用同一套 list/info API。
系列导航
- 目录:博客系统分类
- 上一篇:01 四端架构与请求链路
- 下一篇:03 评论、点赞与站内通知
- 导读:导读 · 第 0 篇
延伸阅读
- 实体定义:
blog-server/src/modules/features/article/entity/article.entity.ts - Home 路由表:
blog-home-nuxt/README.md - uni-app 页面域:
blog-home-uniapp/README.md

全部评论(0)