Files
bps/doc/百盘搜详细设计文档.md
T
2025-05-11 14:16:03 +08:00

5.0 KiB
Raw Blame History

项目概述

目标

构建一个基于Nuxt.js的前端界面,通过后端服务对接多个网盘资源搜索接口,实现资源搜索、筛选、转存及临时分享功能。后端需支持网盘账号管理、资源转存逻辑扩展、Redis缓存及MySQL数据库存储。

约束条件

  • 技术栈
    • 前端:Nuxt.jsTypeScript模式)
    • 后端:Express.jsTypeScript模式)
    • 数据库:Postgres14 ORM使用Prisma
    • 缓存:Redis
    • 接口协议:RESTful API
  • 核心原则
    • 所有网盘操作需通过后端中转,避免用户直接访问原始网盘接口
    • 转存资源需在10分钟后自动删除
    • 系统需支持未来扩展其他网盘服务

功能模块设计

1. 前端界面

1.1 搜索页

  • 核心组件
    • 搜索框:支持输入关键词并提交搜索请求
    • 筛选条件:下拉选择(如“百度网盘”“阿里云盘”等)
    • 分页控件:支持跳转和动态加载
  • 数据展示
    • 列表项包含:文件名、大小、目录路径、来源网盘标识
    • 每项操作按钮:点击“获取链接”触发后端转存流程
  • 交互逻辑
    • 搜索请求发送至后端API /api/search
    • 结果分页响应需包含总页数、当前页数据
    • 筛选条件提交需触发完整搜索请求

1.2 管理后台

  • 功能模块
    • 统计数据看板
      • 实时搜索量统计(按网盘类型)
      • 转存成功/失败次数
      • 用户行为分析(如热门搜索词)
    • 账号管理
      • 网盘账号列表(支持增删改)
      • 账号状态监控(如API调用配额)

2. 后端服务

2.1 核心接口设计

接口路径 方法 功能描述
/api/search POST 接收关键词及筛选条件,调用搜索服务器接口并缓存结果到Redis
/api/generate-link POST 根据资源ID触发转存,返回临时分享链接,设置10分钟过期定时任务
/api/stats GET 返回统计信息(如总搜索次数、转存成功率)
/api/accounts CRUD 管理网盘账号凭证(加密存储)

2.2 转存逻辑模块

  • 流程
    1. 用户点击“获取链接” → 后端验证资源是否存在
    2. 调用对应网盘API(如BaiduAPI、AliyunAPI)进行转存
    3. 转存成功后,记录分享链接及过期时间到数据库
    4. 返回链接给前端,启动定时任务在10分钟后删除资源
  • 扩展性设计
    • 每个网盘的转存逻辑封装为独立模块(如 src/services/BaiduDriveService.ts
    • 通过策略模式(Strategy Pattern)动态选择网盘适配器

2.3 缓存策略

  • Redis缓存规则
    • 搜索结果缓存
      • Keysearch:${keyword}:${filter}
      • TTL5分钟
    • 转存链接缓存
      • Keytemp_link:${resourceId}
      • TTL10分钟(与自动删除逻辑同步)

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类型安全的数据库操作
    • 支持复杂查询(如关联查询转存记录与账号)