5.0 KiB
5.0 KiB
项目概述
目标
构建一个基于Nuxt.js的前端界面,通过后端服务对接多个网盘资源搜索接口,实现资源搜索、筛选、转存及临时分享功能。后端需支持网盘账号管理、资源转存逻辑扩展、Redis缓存及MySQL数据库存储。
约束条件
- 技术栈:
- 前端:Nuxt.js(TypeScript模式)
- 后端:Express.js(TypeScript模式)
- 数据库:Postgres14 (ORM使用Prisma)
- 缓存:Redis
- 接口协议:RESTful API
- 核心原则:
- 所有网盘操作需通过后端中转,避免用户直接访问原始网盘接口
- 转存资源需在10分钟后自动删除
- 系统需支持未来扩展其他网盘服务
功能模块设计
1. 前端界面
1.1 搜索页
- 核心组件:
- 搜索框:支持输入关键词并提交搜索请求
- 筛选条件:下拉选择(如“百度网盘”“阿里云盘”等)
- 分页控件:支持跳转和动态加载
- 数据展示:
- 列表项包含:文件名、大小、目录路径、来源网盘标识
- 每项操作按钮:点击“获取链接”触发后端转存流程
- 交互逻辑:
- 搜索请求发送至后端API
/api/search - 结果分页响应需包含总页数、当前页数据
- 筛选条件提交需触发完整搜索请求
- 搜索请求发送至后端API
1.2 管理后台
- 功能模块:
- 统计数据看板:
- 实时搜索量统计(按网盘类型)
- 转存成功/失败次数
- 用户行为分析(如热门搜索词)
- 账号管理:
- 网盘账号列表(支持增删改)
- 账号状态监控(如API调用配额)
- 统计数据看板:
2. 后端服务
2.1 核心接口设计
| 接口路径 | 方法 | 功能描述 |
|---|---|---|
/api/search |
POST | 接收关键词及筛选条件,调用搜索服务器接口并缓存结果到Redis |
/api/generate-link |
POST | 根据资源ID触发转存,返回临时分享链接,设置10分钟过期定时任务 |
/api/stats |
GET | 返回统计信息(如总搜索次数、转存成功率) |
/api/accounts |
CRUD | 管理网盘账号凭证(加密存储) |
2.2 转存逻辑模块
- 流程:
- 用户点击“获取链接” → 后端验证资源是否存在
- 调用对应网盘API(如BaiduAPI、AliyunAPI)进行转存
- 转存成功后,记录分享链接及过期时间到数据库
- 返回链接给前端,启动定时任务在10分钟后删除资源
- 扩展性设计:
- 每个网盘的转存逻辑封装为独立模块(如
src/services/BaiduDriveService.ts) - 通过策略模式(Strategy Pattern)动态选择网盘适配器
- 每个网盘的转存逻辑封装为独立模块(如
2.3 缓存策略
- Redis缓存规则:
- 搜索结果缓存:
- Key:
search:${keyword}:${filter} - TTL:5分钟
- Key:
- 转存链接缓存:
- Key:
temp_link:${resourceId} - TTL:10分钟(与自动删除逻辑同步)
- Key:
- 搜索结果缓存:
4. 扩展性设计
4.1 网盘适配器
- 抽象接口:
interface DriveAdapter {
transcode(resourceId: string, account: Account): Promise<string | null>
getShareLink(resourceId: string): Promise<string>
}
-
实现示例:
class BaiduDriveAdapter implements DriveAdapter { async transcode(...) { /* 百度网盘转存逻辑 */ } async getShareLink(...) { /* 生成百度网盘分享链接 */ }}
4.2 插件化架构
- 账号管理:
- 新增网盘类型时,仅需注册对应适配器及账号凭证字段
- 转存逻辑通过工厂模式动态选择适配器
5. 安全与可靠性
5.1 安全措施
- 敏感信息保护:
- 网盘账号凭证加密存储(如AES加密)
- Redis缓存数据不存储敏感信息
- 防滥用机制:
- 单用户请求频率限制(通过Nginx或Express Rate Limit中间件)
- 转存失败重试次数限制
5.2 异常处理
- 后端:
- 网盘API调用失败时记录日志并返回错误码
- 转存超时资源自动清理(通过Cron任务扫描
TranscodeRecord表)
- 前端:
- 网络请求超时提示
- 转存失败时显示错误原因(如“账号配额不足”)
6. 非功能性需求
6.1 可维护性
- 日志监控:
- 使用 Winston 或 Log4js 记录关键操作日志
- 日志内容对接loki
附录:技术选型说明
前端(Nuxt.js)
- 优势:
- 支持TypeScript和SSR,提升SEO友好度
- 通过API Routes实现服务端渲染与数据预取
后端(Express.js)
- 优势:
- 灵活配置中间件(如 Redis连接池、CORS)
- 与TypeScript结合良好,支持接口强类型定义
数据库(Postgres + Prisma)
- 优势:
- Prisma提供TypeScript类型安全的数据库操作
- 支持复杂查询(如关联查询转存记录与账号)