一个基于 Node.js + Express + MySQL 的在线答题系统,支持用户登录、答题、成绩统计和证书生成等功能。
- 用户认证: 支持用户名密码登录和SSO单点登录
- 答题系统: 支持单选题、多选题等多种题型
- 实时统计: 实时显示答题进度和成绩排名
- 证书生成: 自动生成PDF格式的成绩证书
- 响应式设计: 支持PC端和移动端访问
- 管理后台: 完整的题目管理和用户管理功能
- 后端: Node.js, Express.js
- 数据库: MySQL
- 实时通信: Socket.IO
- 前端: 原生HTML/CSS/JavaScript
- PDF生成: pdf-lib, pdfkit
- 文件处理: multer
- 认证: express-session, bcrypt
- Node.js 20.0+
- MySQL 5.7+
- npm 或 yarn
git clone <你的仓库地址>
cd gxwtf_quiznpm install- 创建MySQL数据库:
CREATE DATABASE quiz_system;-
导入数据库结构(使用项目中的
gxwtf_quiz.sql文件) -
配置环境变量,复制
.env.example为.env并修改配置:
# 数据库配置
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=your_password
DB_DATABASE=quiz_system
# 会话配置
SESSION_SECRET=your_session_secret
# 服务器配置
PORT=3000# 开发模式
npm run dev
# 生产模式
npm start服务将在 http://localhost:3000 启动
gxwtf_quiz/
├── config/ # 配置文件
│ ├── db.js # 数据库连接
│ └── db2.js # 备用数据库配置
├── controllers/ # 控制器
│ └── quizController.js
├── generate/ # 证书生成相关
│ ├── background*.jpg # 证书背景图
│ ├── font*.ttf # 证书字体
│ └── generate.js # 证书生成逻辑
├── public/ # 静态文件
│ ├── admin/ # 管理后台页面
│ ├── css/ # 样式文件
│ ├── js/ # 前端脚本
│ ├── player/ # 玩家页面
│ └── *.html # 主页面
├── routes/ # 路由文件
│ ├── authRoutes.js # 认证路由
│ └── quizRoutes.js # 答题路由
├── app.js # 应用入口
├── quizSocket.js # Socket.IO 实时通信
├── ssoCallbackSystem.js # SSO回调处理
└── package.json # 项目配置
- 登录系统: 支持用户名密码或SSO登录
- 答题界面: 显示题目和选项,支持倒计时
- 成绩查看: 答题结束后显示成绩和排名
- 证书下载: 生成并下载PDF格式的成绩证书
- 题目管理: 添加、编辑、删除题目
- 用户管理: 查看用户信息和答题记录
- 数据统计: 查看整体答题情况和成绩分布
- 系统设置: 配置系统参数和公告信息
- 在数据库
questions表中添加新的题目类型 - 在
quizController.js中处理新的题目逻辑 - 在前端页面中添加对应的显示和交互逻辑
- 修改
generate/目录下的背景图片和字体 - 调整
generate.js中的证书生成逻辑 - 更新证书样式和布局
- 设置
SSO_ENABLED=true - 配置正确的
SSO_BASE_URL - 确保SSO服务端的回调配置正确
主要数据表:
users- 用户信息表questions- 题目信息表user_answers- 用户答题记录sessions- 会话信息表certificates- 证书信息表
详细数据库结构请参考 gxwtf_quiz.sql 文件。
- Fork 本项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
A: 检查数据库服务是否启动,确认 .env 文件中的数据库配置是否正确。
A: 检查 generate/ 目录下的字体文件和背景图片是否存在。
A: 确认SSO服务端配置正确,检查网络连接和域名配置。
如有问题请提交 Issue 或联系开发团队。
⭐ 如果这个项目对你有帮助,请给它一个星标!