express+mysql+vue,从零搭建一个商城管理系统6--数据校验和登录

提示:学习express,搭建管理系统


前言

需求:主要学习express,所以先写service部分

一、修改models/user.js

const query = require('../config/db');
const bcrypt = require('../config/bcrypt');
const md5 = require('md5');
const secretKey = 'longlongago';

const errFun = (msg,code)=>{
    return {
        code:code||500,
        success:false,
        msg:msg||'操作失败'
    }
}
const sucFun = (data,msg)=>{
    return {
        code:200,
        success:true,
        msg:msg||'操作成功',
        data,
    }
}
const userDao = {
    //注册
    register:async(data)=>{
        //验证账号密码格式
        const validateResult =userDao.validateUserNameAndPassword(data);
        if(!validateResult.success)return errFun(validateResult.msg);
        //查询用户名是否已存在
        const userResult = await userDao.queryUserByUserName(data);
        if(userResult.success)return errFun('用户名已存在');
        //生成userId
        const userId = md5(data.userName+secretKey);
        //加密password
        const password = bcrypt.hash(data.password+secretKey);
        //根据userName查询user
        const sql = `insert into user (userId,userName,password) values('${userId}','${data.userName}','${password}')`;
        const result = await query(sql);
        if(result&&result.affectedRows==1)return sucFun({},'添加用户成功');
        return errFun('添加用户失败');
    },
    //登录
    login:async(data)=>{
        //验证账号密码格式
        const validateResult =userDao.validateUserNameAndPassword(data);
        if(!validateResult.success)return errFun(validateResult.msg);
        //查询用户是否存在
        const userResult = await userDao.queryUserByUserName(data);
        if(!userResult.success)return errFun('用户名错误');
        //验证密码是否正确
        const comparePassword = bcrypt.compare(data.password+secretKey,userResult.data.password);
        //生成token
        if(comparePassword)return sucFun({},'登录成功');
        return errFun('密码错误');
    },
    //通过用户名查询用户信息
    queryUserByUserName:async(data)=>{
        //根据userName查询user
        const sql = `select * from user where userName='${data.userName}'`;
        const result = await query(sql);
        if(result&&result.length>0)return sucFun(result[0],'查询用户成功');
        return errFun('查询用户失败');
    },
    validateUserNameAndPassword:(data)=>{
        //只包含大小写字母数字,包含1种即可
        let nameReg = /[\da-zA-z]{6,16}$/;
        let nameValidate = nameReg.test(data.userName);
        if(!nameValidate)return errFun('用户名格式错误');
        //大写字母,小写字母,特殊符号,包含2种以上
        passwordReg = /^(?![\d]+$)(?![a-z]+$)(?![A-Z]+$)(?![~!@#$%^&*.]+$)[\da-zA-z~!@#$%^&*.]{6,16}$/;
        let passwordValidate = passwordReg.test(data.password);
        if(!passwordValidate)return errFun('密码格式错误');
        return sucFun({},'用户名和密码格式正确');
    },
}

module.exports = userDao;

在这里插入图片描述

二、修改routes下的user.js

const userDao = require('../models/user');
const userRoutes = (router)=>{
    router.post('/user/register',async (req,res)=>{
        const result = await userDao.register(req.body);
        res.json(result);
    });
    router.post('/user/login',async (req,res)=>{
        const result = await userDao.login(req.body);
        res.json(result);
    });
}
module.exports = userRoutes;

在这里插入图片描述

三、Api新建user/login接口

url:http://localhost:1990/user/login
name:/user/login
params:{
“userName”: “longlongago1”,
“password”: “long123456”
}
在这里插入图片描述

四、删除数据库原有数据,添加新验证规则的用户

添加用户
url:http://localhost:1990/user/register
name:/user/register
params:{
“userName”:“longlongago1”,
“password”:“long123456”
}
在这里插入图片描述

四、用户登录

1、用户登录成功
url:http://localhost:1990/user/login
name:/user/login
params:{
“userName”: “longlongago1”,
“password”: “long123456”
}
在这里插入图片描述
2、用户名错误
url:http://localhost:1990/user/login
name:/user/login
params:{
“userName”: “longlongago”,
“password”: “long123456”
}
在这里插入图片描述
3、密码错误
url:http://localhost:1990/user/login
name:/user/login
params:{
“userName”: “longlongago1”,
“password”: “long12345”
}
在这里插入图片描述

总结

踩坑路漫漫长@~@

  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值