Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 44 additions & 35 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,46 +1,55 @@
# 依赖目录
```
# Dependencies
node_modules/
package-lock.json

# 上传目录
uploads/
vditoruploads/
# Database
clipboard.db

# 数据库文件
*.db
*.sqlite
*.sqlite3

# 日志文件
logs/
# Logs and temp files
*.log
*.tmp

# 环境变量文件
# Environment
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
*.env.*

# 编辑器和IDE配置
# Editors
.vscode/
.idea/
*.swp
*.swo
*~

# 操作系统生成的文件
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# 临时文件
*.tmp
*.temp

# 配置文件(可选,如果不想提交配置可以取消下面这行的注释)
# config.json
# Python
__pycache__/
*.pyc
*.pyo
*.pyd

# Build outputs
dist/
build/
target/

# Compression files
*.zip
*.gz
*.tar
*.tgz
*.bz2
*.xz
*.7z
*.rar
*.zst
*.lz4
*.lzh
*.cab
*.arj
*.rpm
*.deb
*.Z
*.lz
*.lzo
*.tar.gz
*.tar.bz2
*.tar.xz
*.tar.zst
```
99 changes: 99 additions & 0 deletions REFACTORING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# 代码重构说明

## 概述

本次重构将原本集中在 `app.js`(864 行)中的代码模块化,提高了代码的可维护性、可读性和可测试性。

## 目录结构

```
/workspace
├── app.js # 主应用入口(重构后)
├── app_legacy.js # 原始应用代码(备份)
├── src/
│ ├── config/ # 配置管理
│ │ └── index.js # 配置加载、保存和路径解析
│ ├── database/ # 数据库服务
│ │ └── index.js # SQLite 数据库操作封装
│ ├── middleware/ # 中间件
│ │ └── auth.js # 认证中间件
│ ├── routes/ # 路由处理
│ │ ├── clipboard.js # 剪贴板相关路由
│ │ ├── files.js # 文件相关路由
│ │ └── admin.js # 管理和 Vditor 上传路由
│ ├── services/ # 业务服务(预留)
│ └── utils/ # 工具函数
│ └── helpers.js # 日期格式化、文件类型判断等
├── public/ # 静态资源
├── views/ # EJS 模板
└── config.json # 应用配置
```

## 模块说明

### 1. 配置管理 (`src/config/index.js`)
- `loadConfig()`: 加载配置文件
- `saveConfig(config)`: 保存配置文件
- `resolvePath(dirPath)`: 解析路径(支持相对和绝对路径)
- `ensureDirectoryExists(dirPath)`: 确保目录存在

### 2. 数据库服务 (`src/database/index.js`)
采用单例模式,提供以下方法:
- `connect()`: 初始化数据库连接
- `getAllItems()`: 获取所有剪贴板项目
- `getItemById(id)`: 根据 ID 获取项目
- `createItem(type, title, content, filePath, createdAt)`: 创建项目
- `updateItem(id, title, content)`: 更新项目
- `deleteItem(id)`: 删除项目
- `getAllFileItems()`: 获取所有文件项目
- `getAllFilePaths()`: 获取所有文件路径

### 3. 认证中间件 (`src/middleware/auth.js`)
- `createAuthMiddleware()`: 创建认证中间件工厂函数

### 4. 路由模块

#### 剪贴板路由 (`src/routes/clipboard.js`)
- `setupIndexRoute(app)`: 首页路由
- `setupCreateRoutes(router, upload)`: 创建项目路由(markdown/text/link/file)
- `setupItemRoutes(router)`: 获取项目和分享页面路由

#### 文件路由 (`src/routes/files.js`)
- `router.get('/file-info/:id')`: 获取文件信息
- `router.get('/text-preview/:id')`: 文本文件预览
- `setupFileDownloadRoute(app)`: 文件下载(支持断点续传)

#### 管理路由 (`src/routes/admin.js`)
- `createVditorUpload()`: 创建 Vditor 上传中间件
- `setupVditorRoutes(vditorUpload)`: Vditor 图片/音频上传
- `setupAdminRoutes()`: 管理页面、密码更新、目录更新、文件同步

### 5. 工具函数 (`src/utils/helpers.js`)
- `formatDateTime(date)`: 日期格式化(UTC+8)
- `getFileType(filePath)`: 获取文件 MIME 类型

## 主要改进

1. **模块化**: 将 864 行的单体文件拆分为多个职责单一的模块
2. **可测试性**: 每个模块可以独立测试
3. **可维护性**: 代码结构清晰,易于定位和修改
4. **复用性**: 通用功能(如配置管理、数据库操作)可被多处复用
5. **类型安全**: 添加了 JSDoc 注释,提供更好的 IDE 支持

## 运行方式

```bash
# 开发模式
npm run dev

# 生产模式
npm start
```

## 兼容性

重构后的代码完全保持原有功能,包括:
- 所有 API 端点保持不变
- 配置文件格式保持不变
- 数据库结构保持不变
- 前端页面无需修改
Loading