接口
module.exports={
host:"localhost",
database:"xiao_u_2",
user:"root",
password:"root",
port:3306
// host:"10.10.32.162",
// database:"xiao_u_2",
// user:"web0817",
// password:"123456",
// port:3306
};
const dbConfig=require("./DBConfig");
const mysql=require("mysql");
class DBConnect{
conn="";
//建立数据库连接
getConnect(){
this.conn=mysql.createConnection(dbConfig);
this.conn.connect(err=>{
if(err)console.log(`数据库连接失败!${
err.message}`);
});
};
//执行SQL语句
getResultBySQL(sql,params){
return new Promise((resolve,reject)=>{
this.conn.query(sql,params,(err,data)=>{
if(err) reject(err.message);
else resolve(data);
});
});
};
//关闭数据库
closeConnect(){
this.conn.end(err=>{
if(err)console.log(`关闭数据失败!${
err.message}`);
});
};
}
module.exports=DBConnect;
const MD5=require("crypto-js").MD5;
const fs=require("fs");
const path=require("path");
const jsonwebtoken=require("jsonwebtoken");
//检查数据合法性
function isCheckData(params){
return params===undefined||params===null||params==="undefined"||params==="null"||params===""?true:false;
}
//检查校验码的正确性
function isCheckSvgCaptcha(sessionCaptcha,userCaptcha){
return sessionCaptcha.toUpperCase()!==userCaptcha.toUpperCase()?true:false
}
//将对象转换为sql语句
function getSQLByObject(user){
let sql=""
for(let [key,value] of Object.entries(user)){
if(!isCheckData(value)){
if(key==="pwd"||key==="pay_pwd"){
value=`'${MD5(value).toString()}'`
}else if(typeof value ==="string"){
value=`'${value}'`;
}
}
sql+=`${
key}=${
value},`;
}
return sql.substring(0,sql.length-1);
}
//生成token
function getToken(obj){
let key=fs.readFileSync(path.join(__dirname,"../key"),"utf8");
return jsonwebtoken.sign(obj,key,{
expiresIn:60*10,
audience:"customer",
issuer:"shadowT",
subject:"xiaoU"
});
}
//解密token
function decodeToken(token){
let key=fs.readFileSync(path.join(__dirname,"../key"),"utf8");
return jsonwebtoken.verify(token,key);
}
module.exports={
isCheckData,
isCheckSvgCaptcha,
getSQLByObject,
getToken,
decodeToken
}
const dbConnect = require("../db/DBConnect");
const db = new dbConnect();
const svg = require("svg-captcha");
const {
isCheckData, getSQLByObject, isCheckSvgCaptcha } = require("./until");
const to = require("await-to-js").default;
const MD5 = require("crypto-js").MD5;
class UserModel {
constructor() {
db.getConnect();//每一个类里面都要建立一次数据库连接,因为会被销毁
}
// 验证码业务
getCapcha() {
return svg.create({
width: 150,
height: 50,
fontSize: 50,
color: true
})
}
//登录业务
async login(user, sessionCaptcha) {
if (isCheckData(user.captchatext)) {
return {
code: 201, msg: "校验码输入不合法!" };
} else if (isCheckData(sessionCaptcha)) {
return {
code: 201, msg: "请获取校验码!" };
} else if (isCheckData(user.username)) {
return {
code: 201, msg: "用户名输入不合法!" };
} else if (isCheckData(user.pwd)) {
return {
code: 201, msg: "密码输入不合法!" };
} else if (isCheckSvgCaptcha(sessionCaptcha, user.captchatext)) {
return {
code: 201, msg: "校验码输入不正确!" };
} else {
let [err, userdata] = await to(db.getResultBySQL(`select * from users where username=? and pwd=?`, [user.username, MD5(user.pwd).toString()]));//数组
if (err) {
console.log(err.message);
return {
code: 201, msg: "登录失败!数据出去旅游了!" };
} else {
if (userdata.length > 0) {
return {
code: 200, msg: `登录成功!` };
} else {
return {
code: 201, msg: `登录失败!用户名或密码错误!` };
}
}
}
}
//注册业务
async addUser(user, sessionCaptcha) {
if (isCheckData(user.captchatext)) {
return {
code: 201, msg: "校验码输入不合法!" };
} else if (isCheckData(sessionCaptcha)) {
return {
code: 201, msg: "请获取校验码!" };
} else if (is