简单用户管理前后端分离项目(试例)

这个博客介绍了在一个简单的用户管理项目中如何实现前后端分离。重点内容包括后端的接口设计,如DBConfig和DBConnect数据库配置及连接,userModel和adminRouter的路由设置,以及前端的login和userlist功能模块,所有这些都需要在测试时同时启动前后端的app.js。
摘要由CSDN通过智能技术生成

接口

  • db/DBConfig.js配置
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
};
  • db/DBConnect.js连接
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;
  • model/until.js
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
}
  • model/userModel.js
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值