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

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

文章目录

  • 前言
  • 一、修改models/user.js
  • 二、修改routes下的user.js
  • 三、Api新建user/login接口
  • 四、删除数据库原有数据,添加新验证规则的用户
  • 四、用户登录
  • 总结


前言

需求:主要学习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('用户名已存在');//生成userIdconst userId = md5(data.userName+secretKey);//加密passwordconst password = bcrypt.hash(data.password+secretKey);//根据userName查询userconst 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);//生成tokenif(comparePassword)return sucFun({},'登录成功');return errFun('密码错误');},//通过用户名查询用户信息queryUserByUserName:async(data)=>{//根据userName查询userconst 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”
}
在这里插入图片描述

总结

踩坑路漫漫长@~@

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/712645.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL数学函数--pow(),abs() 函数 全面且详细

一、幂运算函数: pow 语法: pow(double a, double p) 返回值: double 说明:返回a的p次幂 举例: hive> select pow(2,4) ; 16.0 ​​​​​​​二、绝对值函数: abs 语法: abs(double a) abs(int a) 返回值: double int 说明:返回数值a的绝对值 …

MacBook将iPad和iPhone备份到移动硬盘

#创作灵感# 一个是ICloud不够用,想备份到本地;然而本地存储不够用,增加容量巨贵,舍不得这个钱,所以就想着能不能备份到移动硬盘。刚好有个移动固态,所以就试了一下,还真可以。 #正文# 说一下逻…

《PyTorch深度学习实践》第八讲加载数据集

一、 1、DataSet 是抽象类,不能实例化对象,主要是用于构造我们的数据集 2、DataLoader 需要获取DataSet提供的索引[i]和len;用来帮助我们加载数据,比如说做shuffle(提高数据集的随机性),batch_size,能拿出Mini-Batch进行训练。它…

Windows10环境下MongoDB安装配置

1. 下载对应MongoDB安装包 进入官网:MongoDB官网 如果不连接外网则在官网下载较慢,这里给出下载好的安装包,版本为4.2.25:百度网盘 选择你需要的版本,推荐选择Package的格式为zip(解压即可) Pa…

[VNCTF2024]-PWN:preinit解析(逆向花指令,绕过strcmp,函数修改,机器码)

查看保护: 查看ida: 这边其实看反汇编没啥大作用,需要自己动调。 但是前面的绕过strcmp还是要看一下的。 解题: 这里是用linux自带的产生随机数的文件urandom来产生一个随机密码,然后让我们输入密码,用st…

k8s 存储卷详解与动静部署详解

目录 一、Volume 卷 1.1 卷类型 emptyDir : hostPath: persistentVolumeClaim (PVC): configMap 和 secret: 二、 emptyDir存储卷 2.1 特点 2.2 用途: 2.3 示例 三、 hostPath存储卷 3.1 特点 3.2 用途 …

前端mock数据 —— 使用Apifox mock页面所需数据

前端mock数据 —— 使用Apifox 一、使用教程二、本地请求Apifox所mock的接口 一、使用教程 在首页进行新建项目: 新建项目名称: 新建接口: 创建json: 请求方法: GET。URL: api/basis。响应类型&#xff1…

可以用numpy为for加速

Numpy除了用于科学计算,还有一个功能是可以代替某些for循环,进行同样的功能实现,有于是向量矩阵运算,碰到复杂的for时,计算速度可以提高,从而提高程序性能。以下是一些常用的NumPy函数和操作,可…

Socket网络编程(六)——简易聊天室案例

目录 聊天室数据传输设计客户端、服务器数据交互数据传输协议服务器、多客户端模型客户端如何发送消息到另外一个客户端2个以上设备如何交互数据? 聊天室消息接收实现代码结构client客户端重构server服务端重构自身描述信息的构建重构TCPServer.java基于synchronize…

Nginx多次代理后获取真实的用户IP访问地址

需求:记录用户操作记录,类似如下表格的这样 PS: 注意无论你的服务是Http访问还是Https 访问的都是可以的,我们服务之前是客户只给开放了一个端口,但是既要支持https又要支持http协议,nginx 是可以通过stream 模块配置双…

2023中国PostgreSQL数据库生态大会:洞察前沿趋势,探索无限可能(附核心PPT资料下载)

随着数字化浪潮的推进,数据库技术已成为支撑各行各业数字化转型的核心力量。2023中国PostgreSQL数据库生态大会的召开,无疑为业界提供了一个深入交流、共同探索PostgreSQL数据库技术未来发展趋势的平台。本文将带您走进这场盛会,解析大会的亮…

k8s Pod基础(概念,容器功能及分类,镜像拉取和容器重启策略)

目录 pod概念 Kubernetes设计Pod概念和特殊组成结构的用意 Pod内部结构: 网络共享: 存储共享: pause容器主要功能 pod创建方式 pod使用方式 pod分类 pod的容器分类 基础容器(infrastructure container)&…

加密和签名的区别及应用场景

原文网址:加密和签名的区别及应用场景_IT利刃出鞘的博客-CSDN博客 简介 本文介绍加密和签名的区别及应用场景。 RSA是一种非对称加密算法, 可生成一对密钥(私钥和公钥)。(RSA可以同时支持加密和签名)。 …

元宇宙3D虚拟场景制作深圳华锐视点免费试用

随着元宇宙兴起,3D线上展厅得到了越来越多的关注和应用。基于VR虚拟现实技术的元宇宙3D线上展厅在线编辑系统,更是为企业在展览展示领域带来了前所未有的辅助。 高效便捷: 元宇宙3D线上展厅在线编辑无需复杂的施工和搭建过程,只需…

报错问题解决django.db.utils.OperationalError: (1049, “Unknown database ‘ mxshop‘“)

开发环境:ubuntu22.04 pycharm 功能:django连接使用mysql数据库,各项配置看似正常 报错: django.db.utils.OperationalError: (1049, "Unknown database mxshop") 分析检查原因: Setting的配置文件内&…

gcd+线性dp,[蓝桥杯 2018 国 B] 矩阵求和

一、题目 1、题目描述 经过重重笔试面试的考验,小明成功进入 Macrohard 公司工作。 今天小明的任务是填满这么一张表: 表有 �n 行 �n 列,行和列的编号都从 11 算起。 其中第 �i 行第 �j 个元素…

GRPC 错误码表

code数描述OK0不是错误;成功返回。CANCELLED1操作通常由调用方取消。UNKNOWN2未知错误。例如,当从另一个地址空间接收的值属于此地址空间中未知的错误空间时,可能会返回此错误。此外,未返回足够错误信息的 API 引发的错误可能会转换为此错误。…

ggplot去除背景

在ggplot2中去除背景,通常指的是去除图表的灰色背景和网格线,使图表背景变为透明或白色,以及去除或简化坐标轴的背景。这可以通过调整主题(theme)来实现。ggplot2提供了多种主题设置,可以用来调整图表的外观…

Spring MVC 和 Spring Cloud Gateway不兼容性问题

当启动SpringCloudGateway网关服务的时候,没注意好依赖问题,出现了这个问题: Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway. 解决办法就是:删除SpringMVC的依赖,即下列依赖。 &…

ChatGPT/GPT4科研应用与AI绘图及论文高效写作

原文:ChatGPT/GPT4科研应用与AI绘图及论文高效写作 第一:2024年AI领域最新技术 1.OpenAI新模型-GPT-5 2.谷歌新模型-Gemini Ultra 3.Meta新模型-LLama3 4.科大讯飞-星火认知 5.百度-文心一言 6.MoonshotAI-Kimi 7.智谱AI-GLM-4 第二:…