一个基于 Node.js + Express 的 API 服务项目,提供文件管理、OnlyOffice 文档预览编辑、AI 文本处理和实时协同编辑功能。
⚠️ 警告
此项目仅为编辑器和组件提供示例响应,请勿直接用在实际项目中!
- 📁 文件上传和管理 - 支持单文件/多文件上传、预览、下载、删除 (目前文件存放在本地目录,未存放数据库,请自行手动清除)
- 📄 OnlyOffice 文档预览编辑 - 支持 Word、Excel、PowerPoint 等格式在线预览和编辑
- 🤖 AI 文本处理 - 基于火山引擎大模型,支持文本改进、翻译、总结等功能
- 🔄 实时协同编辑 - 基于 Hocuspocus + Yjs 的实时协同文档编辑
- 🔐 JWT 身份认证 - 统一的认证体系
npm install创建 .env 文件:
# 服务器配置
PORT=3005
# JWT 认证
AUTH_JWT_SECRET=your-jwt-secret-key
# OnlyOffice 配置
ONLYOFFICE_JWT_SECRET=your-onlyoffice-secret
ONLYOFFICE_SERVER_URL=https://your-onlyoffice-server
# 火山引擎 AI 配置(可选)
VOLC_API_KEY=your-api-key-here
VOLC_ENDPOINT=https://ark.cn-beijing.volces.com/api/v3
VOLC_MODEL=ep-xxxxxxxx-xxxxx
# 数据库配置(用于协同编辑)
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=your-password
DB_NAME=your-database执行 documents.sql 创建协同编辑所需的文档表。
# 开发模式(支持热重载)
npm run dev
# 生产模式
npm start服务启动后访问:http://localhost:3005
POST /user/login
# 请求体: { "username": "ykx", "password": "123456" }
# 返回: { "token": "xxx", ... }# 上传文件(需要认证)
POST /attachment/upload/single
POST /attachment/upload/multi
# 预览文件
GET /attachment/preview/:fileId
# 下载文件
GET /attachment/download/:fileId
# 删除文件
DELETE /attachment/delete/:fileId# 方式一:直接访问预览页面(推荐)
GET /onlyoffice/filePreview/:fileId?mode=view
# mode 可选: view(预览)| edit(编辑)
# 方式二:获取配置后前端集成
POST /onlyoffice/config
# 请求头: Authorization: Bearer {token}
# 请求体: { "fileId": "xxx", "mode": "view" }# 非流式处理
POST /ai/doubao/process
# 请求头: Authorization: Bearer {token}
# 请求体: {
# "action": "refactor", # refactor|check|simple|rich|translate|summary|custom
# "content": "要处理的文本",
# "customPrompt": "自定义提示词(可选)"
# }
# 流式处理(SSE)
POST /ai/doubao/stream
# 同上,返回 Server-Sent Events 流式数据
# 健康检查
GET /ai/doubao/healthaction 说明:
refactor- 改进写作check- 检查拼写和语法simple- 简化内容rich- 丰富内容translate- 中英互译summary- 总结custom- 自定义(需提供 customPrompt)
# WebSocket 连接
ws://localhost:3005/collaboration?documentName=example&userId=user123&userName=张三
# 服务状态检查
GET /collaboration/status# 获取文档列表
GET /documents
# 删除文档
DELETE /documents/:name// 直接访问预览页面
window.location.href = '/onlyoffice/filePreview/your-file-id?mode=view';// 调用 AI 处理接口
const response = await fetch('/ai/doubao/process', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({
action: 'refactor',
content: '需要改进的文本'
})
});
const { result } = await response.json();import * as Y from 'yjs'
import { HocuspocusProvider } from '@hocuspocus/provider'
const ydoc = new Y.Doc()
const provider = new HocuspocusProvider({
url: 'ws://localhost:3005',
name: 'document-name',
document: ydoc,
// 可选参数
parameters: {
documentName: 'document-name',
userId: 'user123',
userName: '张三'
}
})
// 使用 Yjs 的协同数据结构(如 Y.Text)
const ytext = ydoc.getText('content')- 创建 API Key:访问 火山引擎控制台 → API Key 管理
- 创建推理接入点:选择模型(推荐
doubao-pro-32k),获取接入点 ID - 选择地域:
- 华北-北京:
https://ark.cn-beijing.volces.com/api/v3 - 华东-上海:
https://ark.cn-shanghai.volces.com/api/v3 - 华南-广州:
https://ark.cn-guangzhou.volces.com/api/v3
- 华北-北京:
需要在 .env 中配置 ONLYOFFICE_SERVER_URL,或在预览页面的 HTML 中修改 OnlyOffice API 脚本地址。
src/
├── app.js # 主应用文件
├── config/ # 配置文件(auth、onlyoffice、upload)
├── routes/ # 路由文件
│ ├── ai/ # AI 相关路由
│ ├── attachment.js # 文件上传管理
│ ├── onlyoffice.js # OnlyOffice 预览编辑
│ ├── collaboration.js # 协同编辑服务
│ ├── document.js # 文档管理
│ └── user.js # 用户认证
├── utils/ # 工具函数
└── views/ # 视图模板
- 所有需要认证的接口都需要在请求头中携带
Authorization: Bearer {token} - 文件上传后会在
uploads/目录生成对应的 JSON 信息文件 - 协同编辑需要先执行
documents.sql创建数据库表 - AI 功能需要配置火山引擎 API Key 才能使用
- 确保 OnlyOffice 文档服务器可访问