黄梅戏文化平台
黄梅戏文化平台
基于 Node.js
+ Express
+ MySQL
+ Redis
实现的黄梅戏文化展示平台
Github: lm379/hmx: 黄梅戏文化平台
Gitee: lm379/hmx: 黄梅戏文化平台
简介
后端使用 Node.js 配合 Express 框架开发,前端为 HTML + CSS + JavaScript 开发(使用模板)
数据库使用MySQL + Redis,其中MySQL负责主体业务逻辑,Redis负责处理验证码
邮箱验证码使用Node.js的nodemailer库,短信使用阿里云的短信接口
视频/图片文件使用腾讯云对象存储,后端授予前端权限允许前端通过 POST 方法直接上传用户头像/视频文件等到对象存储
为项目添加了智能处理,通过 OpenAI 开源的whisper 语音识别模型识别文字,再调用大模型API对视频进行总结,智能处理代码修改自下面代码fork的项目,智能处理代码Github链接: lm379/video_summarize: video_summarize(视频总结:上传视频通过prompt对视频内容经行总结输出)
项目结构
1 | ├── bin // 程序入口目录 |
数据库表结构
- User表
名称 | 类型 | 长度 | Not Null | 键 | 默认值 | 注释 | Key Order |
---|---|---|---|---|---|---|---|
User_id | int | TRUE | TRUE | 自增UID | ASC | ||
Username | varchar | 50 | TRUE | FALSE | 昵称 | ||
Phone | varchar | 15 | TRUE | FALSE | 手机号 | ||
varchar | 255 | FALSE | FALSE | NULL | 邮箱 | ||
Registration_time | timestamp | TRUE | FALSE | CURRENT_TIMESTAMP | 注册时间 | ||
Password | varchar | 255 | TRUE | FALSE | 密码 | ||
Sex | enum | TRUE | FALSE | ‘Other’ | 性别 | ||
Icon | varchar | 255 | FALSE | FALSE | NULL | 头像 | |
Role | enum | TRUE | FALSE | ‘User’ | 权限 | ||
Update_time | timestamp | TRUE | FALSE | CURRENT_TIMESTAMP | 更新时间 | ||
Status | enum | FALSE | FALSE | ‘Normal’ | 状态 |
- Opera表
名称 | 类型 | 长度 | Not Null | 键 | 默认值 | 注释 | Key Order |
---|---|---|---|---|---|---|---|
Opera_id | int | TRUE | TRUE | 自增ID | ASC | ||
Opera_title | varchar | 100 | TRUE | FALSE | 曲名 | ||
Artist | varchar | 100 | FALSE | FALSE | NULL | 艺术家 | |
Release_date | datetime | FALSE | FALSE | NULL | 发行时间 | ||
Duration | time | FALSE | FALSE | NULL | 时长 | ||
Music_path | varchar | 255 | FALSE | FALSE | NULL | ||
Create_time | timestamp | FALSE | FALSE | CURRENT_TIMESTAMP | 上传时间 | ||
Update_time | timestamp | FALSE | FALSE | CURRENT_TIMESTAMP | 更新时间 | ||
Video_path | varchar | 255 | TRUE | FALSE | |||
Description | text | FALSE | FALSE | NULL | 简介 | ||
Avatar | varchar | 255 | FALSE | FALSE | NULL | 缩略图 | |
- Comments表
名称 | 类型 | Not Null | 键 | 默认值 | 键长度 | Key Order |
---|---|---|---|---|---|---|
Comment_id | int | TRUE | TRUE | 0 | ASC | |
User_id | int | FALSE | FALSE | NULL | ||
Opera_id | int | FALSE | FALSE | NULL | ||
Comment_text | text | TRUE | FALSE | |||
Create_time | timestamp | FALSE | FALSE | CURRENT_TIMESTAMP | ||
Update_time | timestamp | FALSE | FALSE | CURRENT_TIMESTAMP |
- Playhistroy表
名称 | 类型 | Not Null | 键 | 默认值 | Key Order |
---|---|---|---|---|---|
Play_id | int | TRUE | TRUE | ASC | |
User_id | int | FALSE | FALSE | NULL | |
Opera_id | int | FALSE | FALSE | NULL | |
Play_time | timestamp | FALSE | FALSE | CURRENT_TIMESTAMP |
- Favorite表
名称 | 类型 | Not Null | 键 | 默认值 | Key Order |
---|---|---|---|---|---|
Favorite_id | int | TRUE | TRUE | ASC | |
User_id | int | FALSE | FALSE | NULL | |
Opera_id | int | FALSE | FALSE | NULL | |
Created_time | timestamp | FALSE | FALSE | CURRENT_TIMESTAMP |
使用方法
提前安装好 Node.js npm MySQL Redis 环境
Node.js的代码理论上是跨平台的,但我只在Ubuntu下测试过
然后进入命令行,输入
1 | npm install nodemon -g |
拉取源码,安装依赖
1 | git clone https://github.com/lm379/hmx |
设置环境变量,并修改.env中的相关字段
1 | mv .env.example .env |
启动
1 | npm start |
部分代码示例
- MySQL数据查询 (以下为示例代码,通过动态构建SQL语句实现)
1 | const getData = (reqParam) => { |
- Redis验证码处理
参考了项目TMDOG666/email-resend-demo
1 | // 存储验证码 |
- 发送短信验证码
注意这里有个坑,阿里云的短信验证码接口无论发送成功与否都会返回状态码200,所以不能通过返回的HTTP状态码来判断是否发送成功
1 | async function sendSms(phoneNumbers, Code) { |
- 发送邮件验证码
1 | let mailOptions = { |
效果
5. GPT总结视频,完整项目见lm379/video_summarize: video_summarize(视频总结:上传视频通过prompt对视频内容经行总结输出)
下面是针对本项目的扩展代码,使用Python的Flask框架开启HTTP接口,让Node.js可以直接调用该接口,而不需要引入Pyrunner之类的库
1 | from flask import Flask, request, jsonify |