Skip to content

Commit fa8190c

Browse files
committed
docs: add CLAUDE.md and refactor plan
1 parent 82b45b8 commit fa8190c

2 files changed

Lines changed: 513 additions & 0 deletions

File tree

CLAUDE.md

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
# Myshkin451 Blog
2+
3+
## 项目概述
4+
5+
个人博客系统,前后端分离架构。支持 Markdown 编辑、分类/标签管理、评论系统、用户认证、图片上传、管理后台。
6+
7+
## 技术栈
8+
9+
### 后端
10+
- **运行时:** Node.js + Express 5.1
11+
- **ORM:** Sequelize 6.37 + MySQL 8.0
12+
- **认证:** JWT (jsonwebtoken) + bcryptjs
13+
- **文件上传:** Multer
14+
- **Markdown:** markdown-it + highlight.js
15+
16+
### 前端
17+
- **框架:** Vue 3.5 (Composition API)
18+
- **构建:** Vite 6.2
19+
- **样式:** Tailwind CSS 3.3 + @tailwindcss/typography
20+
- **路由:** Vue Router 4.5
21+
- **HTTP:** Axios 1.8
22+
- **Markdown 编辑器:** ByteMD
23+
24+
### 部署
25+
- Docker Compose (dev + prod)
26+
- GitHub Actions CI/CD
27+
- Nginx 反向代理(前端生产环境)
28+
29+
## 目录结构
30+
31+
```
32+
Myshkin451-blog/
33+
├── app.js # Express 入口
34+
├── config/
35+
│ └── database.js # Sequelize 数据库配置
36+
├── controllers/ # 路由处理函数
37+
│ ├── adminController.js
38+
│ ├── categoryController.js
39+
│ ├── commentController.js
40+
│ ├── postController.js
41+
│ ├── tagController.js
42+
│ ├── uploadController.js
43+
│ └── userController.js
44+
├── middlewares/
45+
│ ├── authMiddleware.js # JWT 认证 + 权限校验
46+
│ └── uploadMiddleware.js # Multer 文件上传配置
47+
├── models/ # Sequelize 数据模型
48+
│ ├── Category.js
49+
│ ├── Comment.js
50+
│ ├── Post.js
51+
│ ├── PostTag.js # 多对多关联表
52+
│ ├── Tag.js
53+
│ ├── User.js
54+
│ └── index.js # 模型关联定义 + 数据库同步
55+
├── routes/ # Express 路由定义
56+
│ ├── index.js # 路由汇总
57+
│ ├── adminRoutes.js
58+
│ ├── categoryRoutes.js
59+
│ ├── commentRoutes.js
60+
│ ├── postRoutes.js
61+
│ ├── tagRoutes.js
62+
│ ├── uploadRoutes.js
63+
│ └── userRoutes.js
64+
├── scripts/
65+
│ ├── init-db.js # 数据库初始化脚本
66+
│ └── health-check.js # 健康检查
67+
├── uploads/ # 用户上传文件(头像、文章图片)
68+
│ ├── avatars/
69+
│ └── posts/
70+
├── client/ # Vue 前端
71+
│ ├── src/
72+
│ │ ├── App.vue
73+
│ │ ├── main.js
74+
│ │ ├── api/
75+
│ │ │ └── index.js # Axios 封装 + 所有 API 调用
76+
│ │ ├── router/
77+
│ │ │ └── index.js # 路由定义 + 导航守卫
78+
│ │ ├── components/ # 通用组件
79+
│ │ │ ├── admin/ # 管理后台组件
80+
│ │ │ └── ...
81+
│ │ ├── views/ # 页面组件
82+
│ │ └── index.css # 全局样式
83+
│ ├── vite.config.js
84+
│ ├── tailwind.config.cjs
85+
│ └── package.json
86+
├── Dockerfile.backend.dev
87+
├── Dockerfile.backend.prod
88+
├── docker-compose.dev.yml
89+
├── docker-compose.prod.yml
90+
├── .env.example
91+
└── package.json
92+
```
93+
94+
## 常用命令
95+
96+
### 本地开发
97+
98+
```bash
99+
# 后端
100+
npm install
101+
npm run dev # nodemon 启动后端 (端口 3000)
102+
npm run init-db # 初始化数据库
103+
104+
# 前端
105+
cd client
106+
npm install
107+
npm run dev # Vite 启动前端 (端口 5173)
108+
npm run build # 生产构建
109+
```
110+
111+
### Docker 开发环境
112+
113+
```bash
114+
docker compose -f docker-compose.dev.yml up --build # 启动全部服务
115+
docker compose -f docker-compose.dev.yml down # 停止
116+
# 包含: MySQL(3306), Backend(3000), Frontend(5173), Adminer(8080)
117+
```
118+
119+
### Docker 生产环境
120+
121+
```bash
122+
docker compose -f docker-compose.prod.yml up -d --build
123+
```
124+
125+
## 环境变量
126+
127+
参考 `.env.example`,关键变量:
128+
- `DB_HOST`, `DB_USER`, `DB_PASSWORD`, `DB_NAME` — 数据库连接
129+
- `JWT_SECRET` — JWT 签名密钥(必须修改默认值)
130+
- `PORT` — 后端端口(默认 3000)
131+
- `BASE_URL` — 后端基础 URL
132+
133+
## 数据模型关系
134+
135+
```
136+
User ─┬─< Post >─── Category
137+
│ │
138+
│ └──<> Tag (多对多, 通过 PostTag)
139+
140+
└─< Comment >── Post
141+
```
142+
143+
## 已知问题
144+
145+
### 安全
146+
- `authMiddleware.js` 中存在硬编码 JWT 密钥回退值
147+
- `postController.js``createdAt` 可被任意用户篡改
148+
- 前端路由守卫的 admin 校验仅依赖 localStorage,可伪造
149+
- Token 存于 localStorage,存在 XSS 风险
150+
- 无速率限制、无 CSRF 防护
151+
152+
### 架构
153+
- 无 Service 业务逻辑层,所有逻辑堆在 Controller
154+
- 无状态管理(Pinia/Vuex),前端依赖 localStorage
155+
- API 响应格式不统一
156+
- 无输入验证层
157+
- 数据库使用 `{ alter: true }` 同步,无迁移机制
158+
159+
### 代码质量
160+
- 零测试覆盖
161+
- Slug 生成拼接随机数导致 URL 不美观
162+
- 列表接口缺少分页(getAllPosts, getAllCategories 等)
163+
- 存在死代码:testDb.js, HelloWorld.vue, fixSlugs.js
164+
- ArticleCard.vue 和 ArticleCardV2.vue 重复组件
165+
- 大量 console.log 残留

0 commit comments

Comments
 (0)