# 新问卷-服务端 **Repository Path**: elitdr/xwj-server ## Basic Information - **Project Name**: 新问卷-服务端 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-07-28 - **Last Updated**: 2025-12-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 新问卷-服务端 ## 项目概述 这是一个基于 Node.js 和 Koa 框架构建的问卷管理系统后端服务。系统提供了完整的问卷创建、管理、发布和数据收集分析功能。 ## 部署与运行 - 开发环境运行:npm run dev - 生产环境运行:npm start - 支持 Docker 部署 ## 数据库初始化 项目使用 MySQL 数据库,配置信息在 `.env` 文件中。 ### 数据库表结构 项目包含以下四个主要数据表: 1. 用户表 (user):存储用户信息 2. 问卷表 (question):存储问卷信息 3. 组件表 (component):存储问卷中的题目组件 4. 答卷表 (answer):存储用户提交的答卷 ### 初始化数据库步骤 1. 确保 MySQL 数据库服务正在运行 2. 创建对应的数据库(例如:xwj-dev-db 或 xwj-db) ```sql CREATE DATABASE `xwj-db` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 3. 运行以下命令初始化数据库: ```bash npm run db:init ``` 这个命令会执行以下操作: 1. 连接数据库 2. 同步所有数据模型(创建表结构) 3. 创建默认管理员用户(用户名:admin,密码:123456 已加密) ## 技术架构 ### 核心技术栈: - Node.js 运行环境 - Koa2 作为 Web 框架 - Sequelize 作为 ORM 工具 - MySQL 作为数据库 - JWT 进行用户认证 - bcryptjs 处理密码加密 ### 架构模式: - 采用经典的 MVC 架构模式 - 使用中间件处理认证、错误等通用逻辑 - 模块化设计,职责分离清晰 ## 功能模块 1. 用户管理模块 - 用户注册、登录 - 密码修改、昵称修改 - 基于 JWT 的身份验证机制 - 密码使用 bcryptjs 加密存储 2. 问卷管理模块 - 问卷创建、编辑、删除 - 问卷标星、发布功能 - 问卷复制功能 - 问卷组件管理(题目管理) 3. 组件系统 - 支持多种题型组件(单选、多选等) - 组件可排序、隐藏、锁定 - 组件参数可配置 4. 数据收集与统计 - 答卷提交与存储 - 答卷数据统计分析 - 单个组件统计功能 5. 权限控制 - 基于 JWT 的认证机制 - 管理员与普通用户区分 - 用户只能操作自己创建的问卷 ## 目录结构说明 ``` ├── config # 配置文件 ├── src # 源代码目录 │ ├── app # 应用入口和错误处理 │ ├── common # 通用工具函数 │ ├── config # 配置文件 │ ├── constant # 错误码和成功响应定义 │ ├── controller # 控制器层(处理 HTTP 请求) │ ├── db # 数据库连接配置 │ ├── middleware # 中间件(认证、用户验证等) │ ├── model # 数据模型定义 │ ├── router # 路由定义 │ └── service # 业务逻辑层 ``` ## 数据库设计 系统使用 MySQL 数据库,通过 Sequelize ORM 管理数据模型,主要包含以下几个核心表: 1. 用户表 (user):存储用户信息,包括用户名、密码(加密)、昵称和管理员标识 2. 问卷表 (question):存储问卷基本信息,如标题、描述、发布状态等 3. 组件表 (component):存储问卷中的题目组件信息 4. 答卷表 (answer):存储用户提交的答卷数据 ## API 接口设计 系统提供 RESTful API 接口,主要分为: 1. 用户接口: - 用户注册 `/api/user/register` - 用户登录 `/api/user/login` - 修改密码 `/api/user/` - 修改昵称 `/api/user/nickName` 2. 问卷接口: - 获取问卷列表 `/api/question/list` - 获取问卷详情 `/api/question/info/:questionId` - 创建问卷 `/api/question/` - 编辑问卷 `/api/question/edit/:questionId` - 发布问卷(通过编辑接口实现) - 删除问卷 `/api/question/` - 复制问卷 `/api/question/duplicate/:questionId` 3. 统计接口: - 获取问卷统计信息 `/api/question/stat/:questionId` - 获取组件统计信息 `/api/question/stat/:questionId/:componentId` 4. 答卷接口: - 提交答卷 `/api/question/answer/:questionId` - 获取已发布问卷 `/api/question/published/:questionId` ## 安全性考虑 1. 使用 JWT 进行身份验证,确保接口访问安全 2. 用户密码使用 bcryptjs 加密存储 3. 通过中间件实现权限控制,防止越权操作 4. 对用户输入数据进行验证,防止非法数据入库