# TTMS后台开发文档
## 一、概述
本后台是为剧院票务管理系统开发的web应用后台,为剧院票务管理系统web应用及微信小程序提供数据查询,存储的支持。整个后台使用微服务架构,并配置nginx做静态资源管理和均衡负载。
## 二、应用技术
- 开发语言:node.JS
- 系统数据数据库:MySQL 8.0
## 三、开发规范
### 1.命名规范
- 公共:public
- 登录注册:login
### 2.已安装的工具
- express
- express-static
- mysql
- cookie-paser
- cookie-session
- crypto(加密函数)
- request(本地爬虫)
### 3.项目目录
```mariadb
|server #后台根目录
├── README.md
├── node_module #安装工具
├── public #公共模块
├── xxx_server.js #服务后台
├── package.json #项目配置文件
└── package-lock.json #模块配置文件
```
## 四、开发记录
### 公共模块
#### 1.数据库模块
**模块名称:sql.js**
主要提供连接数据库,便捷调用服务,sql语句拼接(mysql模块的再次封装)。
---
1. 创建mysql数据库连接池
```js
var sql = require('./server/public_sql');
var pool = sql.createPool({
connectionLimit : 10,
host : '132.232.169.227',
user : 'admin',
password : 'xxx',
database : 'recruitment'
});
```
使用createPool方法进行数据库连接池创建,通过数据库连接池,提高与mysql之间交互效率。
---
2. 通过连接池进行数据库操作
```js
sql.sever(pool, sqlString);
async function(){
try {
var selectRepeat = await sql.sever(pool, sqlString);
//同步返回数据内容
} catch (err) {
throw err;
}
}
```
封装sql数据库命令sever,通过获取sql命令以及回调函数,实现包括从连接池获取连接,使用完释放连接的完整SQL查询。本功能返回promise,可以结合是有async将异步转换成同步代码。
**参数说明:**
- pool:<Object> 连接池
- SQLString:<String> sql语句
**提示:** 可以将SQLString生成函数,最后的回调函数,提取出来,优化代码。
**注意:** 输入的SQLString要求要进行转义,防止SQL注入。
---
3. sql语句转换
```js
sql.escape(name);
```
不同类型的值转义的方式是有区别的,其区别如下:
- 数字不会被转义
- 布尔值会被转移成 true / false
- Date 对象会被转义成形如 'YYYY-mm-dd HH:ii:ss' 的字符串
- Buffer 会被转义成十六进制字符串,如: X'0fa5'
- 字符串会被安全地转义
- 数组会被转义成列表,例如: ['a', 'b'] 会被转义成 'a', 'b'
- 嵌套数组会被转义成多个列表(在大规模插入时),如: [['a', 'b'], ['c', 'd']] 会被转义成 ('a', 'b'), ('c', 'd')
- 对象的所有可遍历属性会被转义成键值对。如果属性的值是函数,则会被忽略;如果属性值是对象,则会使用其 toString() 方法的返回值。
- undefined / null 会被转义成 NULL
- NaN / Infinity 将会被原样传入。由于MySQL 并不支持这些值,在它们得到支持之前,插入这些值将会导致MySQL报错。
**注意:** 所有从前端获取的内容,不能直接拼接进入sql语句,必须转换后再使用。
---
4. SELECT语句拼接
```js
sql.select(type,tablename[,where]);
```
数据库查询命令拼接select,通过输入对应参数,返回拼接好的sql查询语句。
**参数说明:**
- type:<Array> 查询的字段
- tablename:<String> 查询的表
- where:<String> where过滤语句(参数可选)
**注意:** 当有多条Where过滤条件时,注意拼接时的空格。
**示例:**
```js
obj={
name:"樊宗渤",
password:"04173167"
}
let sqlString = sql.select(['user_name', 'user_password'], 'user',
`user_name=${sql.escape(obj.name)} AND user_password=${sql.escape(obj.password)}`);
```
---
5. INSERT语句拼接
```js
sql.insert(tablename,type,value,ignore);
sql.insert("registryinformation",["password","phoneNum"],["asd",13345]);
```
数据库插入命令拼接insert,通过输入对应参数,返回拼接好的sql插入语句。
**参数说明:**
- tablename:<String> 查询的表
- type:<Array> 插入的字段
- valuse:<Array> 插入的值
- ignore:<Boole> 筛选防止多重添加(可选参数)
**注意:** 插入字段与插入值的个数应该相同。
**提示:**参数ignore为true表示,如果数据库中已经存在相同的记录,则忽略当前新数据;
---
6. UPDATE语句拼接
```js
sql.update(tablename, type, value[,where]);
sql.update("registryinformation",["password","phoneNum"],["123",123],"name='樊宗渤'");
```
**参数说明:**
- tablename:<String> 查询的表
- type:<Array> 插入的字段
- valuse:<Array> 插入的值
- where:<String> where过滤语句(参数可选)
**注意:** 当有多条Where过滤条件时,注意拼接时的空格。修改字段与修改值的个数应该相同。
---
7. DELETE语句拼接
```js
sql.del(tablename[,where]);
sql.del("registryinformation","name='樊宗渤'");
```
**参数说明:**
- tablename:<String> 查询的表
- where:<String> where过滤语句(参数可选)
**注意:** 当有多条Where过滤条件时,注意拼接时的空格。
**警告:** 此接口不使用where参数会导致删除数据表,请谨慎使用。
#### 2.项目配置文件
**模块名称:system_config.js**
将数据库登录信息为配置文件进行编写。便于后期更改和维护。
```json
{
sql: {
connectionLimit: 10,
host: 'localhost',
user: 'root',
password: '3832414122',
database: 'ttms'
},url:"http://localhost:529"
}
```
#### 3.封装网络请求
**模块名称:http.js**
实现功能:
- express框架,建立server服务
- 设置cookie,session中间件
- header处理跨域
- 数据解析-中间件
- 更新session过期时间
- 封装res数据发送
- 封装session安全验证
- 封装退出登录函数
```js
module.exports = {
send: send,//发送数据
server: server,//建立server服务
sessionStart:sessionStart,//session安全验证
exit:exit,//退出登录
judge:judge//判读参数是否合法
path:path//内网爬虫
}
//函数原型
function send(res, obj){};
const server = express();
function sessionStart(){};
function exit(){};
function judge(obj){};
function path(add,qs);
```
注意:
1. sessionStart安全验证依据为session.style是否为1
2. 退出登录,将session.style设置为0,同时cookie-style也设置为0
#### 4.跨站cookie
**模块名称:cookie_step.js**
这个模块使用的目的是,下发跨站验证登录cookie。对外暴露cookieStep,translateCookie,sessionStep函数
```js
cookieStep(obj,res)
cookieStep({
name:"xxx",
password:"xxx"
},res)
```
**参数说明:**
- obj:<Object> 验证对象(对象中应包括name和password属性)
- res:<httpResponse> 验证下发目标
- 加密拼接规则:name+password+time
---
```js
var obj = translateCookie(req)
```
**参数说明:**
- obj:<Object> 验证对象(对象中包括name和password和style值)
- req:<httpRequest> 请求来源对象
- obj.style(1正常,-1解析错误,-2解析超时)
---
```js
sessionStep(req)
```
**参数说明:**
- req:<httpRequest> 请求来源对象
- 下发对应session.style=1
**注意:**
1. 通过cookie登录保持,绑定cookie--style,有效时长1天cookie-style存储内容为obj.name
2. 通过cookie跨页跳转验证,绑定cookie--pbl,有效时长15秒
### 业务模块
#### 1.login部分
注册:判断传入参数是否正确---->校验用户名唯一性---->数据写入数据库---->下发cookie---->url跳转
登录:判断传入参数是否正确---->校验用户名密码正确性---->下发cookie---->url跳转
登录保持:判断cookie-style值---->校验用户名---->下发cookie---->url跳转
#### 2
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
管理系统是一种通过计算机技术实现的用于组织、监控和控制各种活动的软件系统。这些系统通常被设计用来提高效率、减少错误、加强安全性,同时提供数据和信息支持。以下是一些常见类型的管理系统: 学校管理系统: 用于学校或教育机构的学生信息、教职员工信息、课程管理、成绩记录、考勤管理等。学校管理系统帮助提高学校的组织效率和信息管理水平。 人力资源管理系统(HRM): 用于处理组织内的人事信息,包括员工招聘、培训记录、薪资管理、绩效评估等。HRM系统有助于企业更有效地管理人力资源,提高员工的工作效率和满意度。 库存管理系统: 用于追踪和管理商品或原材料的库存。这种系统可以帮助企业避免库存过剩或不足的问题,提高供应链的效率。 客户关系管理系统(CRM): 用于管理与客户之间的关系,包括客户信息、沟通记录、销售机会跟踪等。CRM系统有助于企业更好地理解客户需求,提高客户满意度和保留率。 医院管理系统: 用于管理医院或医疗机构的患者信息、医生排班、药品库存等。这种系统可以提高医疗服务的质量和效率。 财务管理系统: 用于记录和管理组织的财务信息,包括会计凭证、财务报表、预算管理等。财务管理系统
资源推荐
资源详情
资源评论
收起资源包目录
大一剧院票务管理系统.zip (106个子文件)
Play_UI.cpp 16KB
people.cpp 15KB
Account_UI.cpp 15KB
Schedule_UI.cpp 14KB
Sale_UI.cpp 12KB
Studio_UI.cpp 11KB
Seat_UI.cpp 10KB
window.cpp 9KB
window.cpp 9KB
SalesAnalysis_UI.cpp 7KB
place.cpp 7KB
register.cpp 7KB
Schedual_Persist.cpp 6KB
Play_Persist.cpp 5KB
Sale_Persist.cpp 5KB
Seat_Persist.cpp 4KB
Main_Menu.cpp 4KB
Ticket_Persist.cpp 4KB
Account_Persist.cpp 4KB
input.cpp 4KB
listTestDrv.cpp 4KB
SalesAnalysis.cpp 4KB
login.cpp 4KB
Seat.cpp 3KB
Account.cpp 3KB
Ticket.cpp 3KB
Schedule.cpp 3KB
Studio_Persist.cpp 3KB
Query_Persist.cpp 3KB
Play.cpp 3KB
Query_play_UI.cpp 2KB
SalesAnalysis_Persist.cpp 2KB
common.cpp 2KB
EntityKey.cpp 2KB
EntityKey_Persist.cpp 2KB
Ticket_UI.cpp 2KB
Queries_Menu.cpp 1KB
Studio.cpp 815B
Sale.cpp 558B
main.cpp 480B
gly.cpp 469B
math.cpp 293B
.gitattributes 66B
list.h 4KB
Schedule.h 3KB
Play.h 3KB
Schedule_Persist.h 2KB
Schedule_UI.h 2KB
Play_Persist.h 2KB
Play_UI.h 2KB
Seat.h 1KB
SalesAnalysis.h 1KB
Account.h 1KB
Ticket.h 944B
Sale.h 942B
Sale_Persist.h 901B
EntityKey.h 871B
Sale_UI.h 849B
Studio.h 723B
Query_Persist.h 719B
common.h 626B
Ticket_Persist.h 599B
Account_UI.h 565B
include.h 554B
Seat_UI.h 540B
SalesAnalysis_UI.h 511B
listTestDrv.h 509B
Seat_Persist.h 493B
Account_Persist.h 474B
SalesAnalysis_Persist.h 381B
Studio_Persist.h 370B
EntityKey_Persist.h 333B
Studio_UI.h 314B
window.h 281B
Queries_Menu.h 177B
Main_Menu.h 147B
Query_Play_UI.h 131B
Ticket_UI.h 74B
search.js 32KB
ttms_server_operation.js 8KB
ttms_server_login.js 6KB
http.js 4KB
play.js 4KB
main.js 2KB
index.js 2KB
sql.js 2KB
cookie_step.js 1KB
app.js 534B
system_config.js 194B
app.json 1KB
project.config.json 774B
search.json 201B
sitemap.json 191B
main.json 76B
index.json 27B
play.json 27B
README.md 16KB
main.wxml 2KB
play.wxml 1KB
index.wxml 1KB
共 106 条
- 1
- 2
资源评论
JJJ69
- 粉丝: 6215
- 资源: 5783
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功