# 宇之然·星辰绘线 - 后端服务 ## 项目简介 这是宇之然·星辰绘线项目的后端服务,提供 RESTful API 接口,支持微信小程序和后台管理系统。 # 1. 查找占用指定端口的进程ID netstat -tunlp | grep :3001 # 2. 根据进程ID kill进程 kill -9 进程ID ## 技术栈 - **运行时**: Node.js 18+ - **框架**: Express.js 4.18 - **数据库**: MongoDB (Mongoose ODM) - **认证**: JWT - **安全**: Helmet, CORS, Rate Limit ## 项目结构 ``` wdkj-server/ ├── src/ │ ├── config/ # 配置文件 │ │ └── database.js # 数据库连接 │ ├── middleware/ # 中间件 │ │ └── auth.js # 认证中间件 │ ├── models/ # 数据模型 │ │ ├── User.js # 用户模型 │ │ ├── Order.js # 订单模型 │ │ ├── Gallery.js # 画廊模型 │ │ ├── Knowledge.js # 知识库模型 │ │ ├── ShopItem.js # 商品模型 │ │ ├── Admin.js # 管理员模型 │ │ └── AdminLog.js # 操作日志模型 │ ├── routes/ # 路由 │ │ ├── auth.js # 认证路由 │ │ ├── user.js # 用户路由 │ │ ├── payment.js # 支付路由 │ │ ├── gallery.js # 画廊路由 │ │ ├── knowledge.js # 知识库路由 │ │ ├── admin.js # 管理后台路由 │ │ └── index.js # 路由汇总 │ ├── utils/ # 工具函数 │ │ ├── response.js # 统一响应 │ │ ├── logger.js # 日志工具 │ │ └── weixin.js # 微信API工具 │ └── index.js # 主入口 ├── logs/ # 日志目录 ├── .env # 环境变量 ├── package.json # 项目配置 └── README.md # 项目说明 ``` ## 快速开始 ### 1. 安装依赖 ```bash cd wdkj-server npm install ``` ### 2. 配置环境变量 复制 `.env.example` 为 `.env` 并修改配置: ```env # 服务配置 PORT=3000 NODE_ENV=development # MongoDB 配置 MONGODB_URI=mongodb://wdkj123:wdkj123@192.168.136.130:27017/wdkj?authSource=wdkj # JWT 配置 JWT_SECRET=your_secret_key_here JWT_EXPIRE=7d # 微信小程序配置 WX_APPID=wxdad62baf4ccd09e3 WX_SECRET=your_wx_app_secret # 微信支付配置 WX_PAY_MCH_ID=1108945993 WX_PAY_API_KEY=your_apiv3_key ``` ### 3. 启动服务 ```bash # 开发环境 npm run dev # 生产环境 npm start ``` ### 4. 验证服务 访问健康检查接口: ```bash curl http://localhost:3000/health ``` ## API 文档 ### 认证相关 - `POST /api/auth/login` - 小程序登录 - `POST /api/auth/admin/login` - 管理员登录 - `GET /api/auth/me` - 获取当前用户信息 ### 用户相关 - `GET /api/user/progress` - 获取用户进度 - `POST /api/user/progress` - 保存用户进度 - `GET /api/user/leaderboard` - 获取排行榜 ### 支付相关 - `POST /api/payment/create-order` - 创建订单 - `POST /api/payment/callback` - 支付回调 - `POST /api/payment/verify` - 验证支付 - `GET /api/payment/products` - 获取商品列表 ### 画廊相关 - `GET /api/gallery` - 获取作品列表 - `POST /api/gallery` - 上传作品 - `GET /api/gallery/:id` - 获取作品详情 - `POST /api/gallery/:id/like` - 点赞作品 ### 知识库相关 - `GET /api/knowledge` - 获取知识列表 - `GET /api/knowledge/:id` - 获取知识详情 - `POST /api/knowledge/:id/collect` - 收藏知识 - `GET /api/knowledge/:dim/questions` - 获取问答 ### 管理后台 - `GET /api/admin/dashboard` - 获取仪表盘数据 - `GET /api/admin/users` - 获取用户列表 - `GET /api/admin/users/:id` - 获取用户详情 - `GET /api/admin/knowledge` - 获取知识列表 - `POST /api/admin/knowledge` - 创建/更新知识 - `POST /api/admin/knowledge/review` - 审核知识 - `GET /api/admin/gallery` - 获取画廊作品 - `POST /api/admin/gallery/review` - 审核作品 - `GET /api/admin/orders` - 获取订单列表 - `GET /api/admin/shop` - 获取商品列表 - `POST /api/admin/shop` - 保存商品 - `GET /api/admin/logs` - 获取操作日志 ## 数据库初始化 首次启动服务时,需要初始化管理员账户: ```javascript // 可以创建一个初始化脚本 const Admin = require('./src/models/Admin') async function initAdmin() { const admin = new Admin({ username: 'admin', password: 'admin123456', email: 'admin@wdkj.com', role: 'super_admin', permissions: ['*'] }) await admin.save() } ``` ## 开发指南 ### 代码规范 - 使用 ES6+ 语法 - 异步操作使用 async/await - 错误统一通过 ApiResponse 处理 - 所有操作记录日志 ### 日志系统 日志级别: - `debug`: 调试信息 - `info`: 常规信息 - `warn`: 警告信息 - `error`: 错误信息 使用示例: ```javascript const logger = require('./utils/logger') logger.info('用户登录', { openid: 'xxx' }) logger.error('数据库错误', error) ``` ### 权限系统 角色权限矩阵: | 角色 | 权限范围 | |------|----------| | super_admin | 所有权限 (*) | | content_manager | 知识库、画廊、用户查看 | | shop_manager | 商品、订单、用户查看 | | viewer | 仪表盘、分析、用户查看 | ## 生产部署 ### 使用 PM2 ```bash # 安装 PM2 npm install -g pm2 # 启动服务 pm2 start src/index.js --name wdkj-server # 查看状态 pm2 status # 查看日志 pm2 logs wdkj-server ``` ### 使用 Docker 创建 `Dockerfile`: ```dockerfile FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . EXPOSE 3000 CMD ["npm", "start"] ``` 构建并运行: ```bash docker build -t wdkj-server . docker run -p 3000:3000 -d wdkj-server ``` ## 注意事项 1. **安全**: 生产环境必须修改 JWT_SECRET 2. **数据库**: 确保 MongoDB 已正确配置访问权限 3. **支付**: 微信支付需要真实的商户证书和密钥 4. **日志**: 生产环境会自动写入日志文件 5. **限流**: 已配置 API 请求频率限制 ## 许可证 MIT License