基于 Elysia + Bun + Prisma + PostgreSQL 的师生项目管理系统后端。
bun install
复制 .env.example 并填写实际值:
cp .env.example .env
需要配置的关键变量:
| 变量 | 说明 | 必填 |
|---|---|---|
DATABASE_URL | PostgreSQL 连接字符串 | 是 |
ACCESS_TOKEN_SECRET | JWT Access Token 签名密钥 | 是 |
REFRESH_TOKEN_SECRET | JWT Refresh Token 签名密钥 | 是 |
PORT | 服务端口,默认 3000 | 否 |
CORS_ORIGINS | 允许的跨域来源,逗号分隔 | 否 |
NODE_ENV | 运行环境,影响 CORS 策略 | 否 |
生成 Prisma Client 并执行数据库迁移:
bunx prisma generate bunx prisma migrate deploy
开发模式(文件变更自动重启):
bun run dev
生产构建:
bun run build bun run start
启动后访问 http://localhost:3000/swagger 查看 API 文档。
应用启动时会自动检查用户表,仅当用户表为空时才会初始化种子数据。已有数据的数据库不会受到影响。
种子账户:
| 角色 | 学号/工号 | 密码 |
|---|---|---|
| 管理员 | admin001 | Admin123 |
| 教师 | teacher001 | Teacher123 |
| 学生 | student001 | Student123 |
| 学生 | student002 | Student123 |
密码均满足校验规则(≥8位,包含大小写字母和数字),存储时经过 bcrypt 哈希。
种子还会创建两个示例项目和对应的学生申请记录。
docker build -t sem-mentor-backend .
docker run -p 3000:3000 --env-file .env sem-mentor-backend
容器启动时会自动执行 prisma migrate deploy,随后启动应用。
src/ ├── index.ts # 入口:Elysia 配置、统一响应包装、种子逻辑 ├── lib/ │ ├── auth.ts # JWT 认证、角色/权限中间件 │ └── prisma.ts # Prisma Client 实例 ├── routes/ │ ├── userRoutes.ts # 用户相关接口 │ ├── projectRoutes.ts # 项目相关接口 │ └── stuprojectRoutes.ts # 学生申请相关接口 └── services/ ├── userService.ts # 用户业务逻辑 ├── projectService.ts # 项目业务逻辑 └── stuprojectService.ts # 学生申请业务逻辑
所有接口返回统一的 JSON 结构:
成功:
{
"code": 200,
"message": "",
"data": { ... }
}
失败:
{
"code": "VALIDATION_ERROR",
"message": "请求参数验证失败",
"data": null
}