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.hqwc.cn/news/496713.html

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

相关文章

springboot226经方药食两用服务平台

经方药食两用服务平台的设计与实现 摘要 近年来,信息化管理行业的不断兴起,使得人们的日常生活越来越离不开计算机和互联网技术。首先,根据收集到的用户需求分析,对设计系统有一个初步的认识与了解,确定经方药食两用…

IPD(集成产品开发)—核心思想

企业发展到一定阶段就会遇到管理瓶颈,IPD流程是一种高度结构化的产品开发流程,它集成了业界很多优秀的产品开发方法论,像搭积木一样的组合成一种非常有效的流程。如果我们能根据企业的规模和行业特点,对全流程的IPD进行合适的裁剪…

接口测试的测试要点

接口测试的测试要点,你知道都有哪些吗? 接口测试是软件测试中的重要组成部分,它的目的是评估接口的质量和可靠性,以保证系统的正常运行。在进行接口测试时,必须要考虑到以下几个方面: 测试用例的编写 测试…

基于HT32的智能家居demo(蓝牙上位机)

参加合泰杯作品的部分展示,基于HT32的智能家居,这里展示灯光的相关控制,是用蓝牙进行的数据透传,参考了一些资料,美化封装了一下之前的上位机界面。 成果展示 点击主界面的蓝牙设置,进行连接,下…

Window系统安装USB Redirector结合cpolar实现远程访问本地USB设备

文章目录 前言1. 安装下载软件1.1 内网安装使用USB Redirector1.2 下载安装cpolar内网穿透 2. 完成USB Redirector服务端和客户端映射连接3. 设置固定的公网地址 前言 USB Redirector是一款方便易用的USB设备共享服务应用程序,它提供了共享和访问本地或互联网上的U…

如何使用Sora?Sora小白教程一文通

如果需要使用Sora或者GPT4,请参考文章:如何使用Sora?Sora小白教程一文通 什么是Sora Sora是OpenAI于2024年2月18日凌晨发布的新的文生视频大模型,名为 “ Sora ”。 从OpenAI在官网展示的Sora生成视频的效果来看,在生…

naive-ui-admin 表格去掉工具栏toolbar

使用naive-ui-admin的时候,有时候不需要显示工具栏,工具栏太占地方了。 1.在src/components/Table/src/props.ts 里面添加属性 showToolbar 默认显示,在不需要的地方传false。也可以默认不显示 ,这个根据需求来。 2.在src/compo…

2024大厂Android面试题精选,Android技术篇

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

淘金优化算法GRO求解不闭合MD-MTSP,可以修改旅行商个数及起点(提供MATLAB代码)

一、淘金优化算法GRO 淘金优化算法(Gold rush optimizer,GRO)由Kamran Zolf于2023年提出,其灵感来自淘金热,模拟淘金者进行黄金勘探行为。淘金优化算法(Gold rush optimizer,GRO)提…

计网Lesson14 - 传输层协议头分析

文章目录 1. 传输层概述1.1 传输层的作用1.2 传输层中两个重要协议1.2.1 TCP1.2.2 UDP1.2.3. 因特网中典型应用使用的运输层协议 1.3 运输层端口号1.4 UDP和TCP的对比 2. UDP报文段格式UDP首部构成 3. TCP报文段格式TCP首部构成序号和确认号的计算 1. 传输层概述 1.1 传输层的…

vue.config.js publicPath 和 vue-router base 结合配置项目根目录为二级目录案例

背景: 同个域名下需要有 PC 管理后台, H5 端, 企业微信 ......等多个端, 需要在一个域名下通过不同的路径来区分不同的项目; 例如: abc.com/pc, abc.com/h5, abc.com/wx-work.... 此处做个记录 步骤: 1. 修改 vue.config.js 中的 publicPath module.exports {outputDir:…

软件测试笔记(二):软件测试流程

1 测试流程概述 软件测试流程包括: 测试计划:测试计划是指根据用户需求报告中关于功能要求和性能指标的规格说明书,定义相应的测试需求报告,使得随后所有的测试工作都围绕着测试需求来进行,同时适当选择测试内容&…