You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.9 KiB
3.9 KiB
项目设置指南
环境要求
- Node.js >= 16
- pnpm >= 8
安装步骤
1. 安装所有依赖
pnpm install:all
或者分别安装:
# 根目录
pnpm install
# 后端
cd backend
pnpm install
# 前端
cd ../frontend
pnpm install
2. 初始化数据库
cd backend
pnpm run migrate
这将创建所有必要的数据库表并插入默认设置。
3. 启动开发服务器
在项目根目录运行:
pnpm dev
这将同时启动:
- 后端服务:http://localhost:3000
- 前端服务:http://localhost:5173
或者分别启动:
# 后端
pnpm dev:backend
# 前端(新终端)
pnpm dev:frontend
项目结构
just-demo/
├── backend/ # 后端服务
│ ├── src/
│ │ ├── controllers/ # 控制器
│ │ ├── models/ # 数据模型
│ │ ├── routes/ # 路由
│ │ ├── middleware/ # 中间件
│ │ ├── utils/ # 工具函数
│ │ ├── config/ # 配置文件
│ │ └── migrations/ # 数据库迁移
│ ├── uploads/ # 上传文件存储
│ └── package.json
├── frontend/ # 前端应用
│ ├── src/
│ │ ├── views/ # 页面组件
│ │ ├── components/ # 通用组件
│ │ ├── router/ # 路由配置
│ │ ├── store/ # 状态管理
│ │ ├── api/ # API接口
│ │ └── utils/ # 工具函数
│ └── package.json
├── database/ # 数据库文件
└── package.json # 根配置
功能特性
已实现功能
-
用户认证系统
- 用户注册(第一个注册的为超级管理员)
- 用户登录(JWT token认证)
- 用户信息获取
-
项目管理
- 上传单个HTML文件或ZIP压缩包
- 项目列表展示(网格布局)
- 项目筛选(分类、标签)
- 项目搜索
- 项目详情查看
- 项目删除(仅创建者或管理员)
-
文件管理
- 附件上传和下载
- Markdown文档上传和查看
- 静态资源服务
-
预览功能
- iframe沙盒预览
- 项目信息抽屉
- 文档查看器
-
系统设置
- 允许/禁止注册
- 允许/禁止上传
- 仅超级管理员可修改
-
安全措施
- 文件类型验证
- 文件大小限制
- 路径遍历防护
- XSS防护(CSP头)
- JWT认证
- 密码加密(bcrypt)
- 权限验证
API端点
认证
POST /api/auth/register- 注册POST /api/auth/login- 登录POST /api/auth/logout- 登出GET /api/auth/me- 获取当前用户信息
项目
GET /api/projects- 获取项目列表GET /api/projects/:id- 获取项目详情POST /api/projects- 上传项目(需要登录)DELETE /api/projects/:id- 删除项目(需要登录)GET /api/projects/:id/preview- 预览项目
文件
GET /api/files/:projectId/*- 获取项目文件GET /api/files/attachment/:id- 下载附件GET /api/files/document/:id- 获取文档
设置
GET /api/settings- 获取所有设置(需要管理员权限)PUT /api/settings/:key- 更新设置(需要超级管理员权限)
数据库表结构
users- 用户表projects- 项目表attachments- 附件表documents- 文档表settings- 设置表
注意事项
- 首次注册的用户自动成为超级管理员
- 上传的文件存储在
backend/uploads/目录 - 数据库文件存储在
database/目录 - 生产环境请修改
backend/src/config/config.ts中的jwtSecret - 文件大小限制:单个HTML文件10MB,ZIP文件50MB
开发说明
- 后端使用 TypeScript + Koa3
- 前端使用 TypeScript + Vue3 + Vite
- 数据库使用 SQLite + Knex.js
- 包管理使用 pnpm