width: 500px;
height: 500px;
border-color: pink;
margin: 0 auto;
}
input{
width: 200px;
height: 30px;
margin-top: 10px;
outline: none;
}
- 主界面web/index.html
退出
管理- 游客列表
- 更新信息
- 重置头像
- 重置密码
-
后端
=====================================================================
- 连接数据库db/index.js
const mysql=require(‘mysql’)
//建立数据库连接
const db=mysql.createPool({
host:‘127.0.0.1’,
user:‘root’,
password:‘123456’,
database:‘test2’
})
module.exports=db
- 建立路由
- 公开路由,不用身份验证router/user.js
const express=require(‘express’)
const router=express.Router()
//导入路由模块
const user_handler=require(‘…/router-handler/user’)
//导入验证数据中间件
const expressJoi=require(‘@escook/express-joi’)
//导入验证规则对象
const {reg_sign_schema}=require(‘…/schema/user’)
//注册新用户
router.post(‘/reguser’,expressJoi(reg_sign_schema),user_handler.reguser)
//登录
router.post(‘/sign’,expressJoi(reg_sign_schema),user_handler.sign)
module.exports=router
- 私有路由要验证router/userinfo.js
const express=require(‘express’)
const router=express.Router()
//导入路由模块
const userinfo_handler=require(‘…/router-handler/userinfo’)
//导入数据验证中间件
const expressJoi=require(‘@escook/express-joi’)
//导入验证条件
const {update_userinfo_schema,update_password_schema,update_avatar_schema,delete_user_shema}=require(‘…/schema/user’)
//获取用户基本信息
router.get(‘/userinfo’,userinfo_handler.getUserinfo)
//更新用户信息
router.post(‘/updateUserinfo’,expressJoi(update_userinfo_schema),userinfo_handler.updataUserinfo)
//重置密码
router.post(‘/updatePwd’,expressJoi(update_password_schema),userinfo_handler.updatePassword)
//更换用户头像
router.post(‘/update/avatar’,expressJoi(update_avatar_schema),userinfo_handler.updateAvatar)
//获取访客列表
router.get(‘/list’,userinfo_handler.getList)
//删除用户
router.post(‘/delUser’,expressJoi(delete_user_shema),userinfo_handler.getDelUser)
module.exports=router
- 路由执行代码
- 公开路由执行代码router-handler/user.js
//导入数据库模块
const db=require(‘…/db/index’)
//加密模块
const bcrypt=require(‘bcryptjs’)
//导入token模块
const jwt=require(‘jsonwebtoken’)
const config=require(‘…/schema/config’)
const { TokenExpiredError } = require(‘jsonwebtoken’)
//注册新用户
exports.reguser=(req,res)=>{
const userinfo=req.body
// if(!userinfo.name||!userinfo.password){
// // return res.send({
// // status:1,
// // message:‘用户名或密码不为空’
// // })
// return res.cc(‘用户名或密码不为空’)
// }
//定义数据库查询语句
const sqlStr=‘SELECT * FROM ev_users WHERE username=?’
db.query(sqlStr,[userinfo.username],function(err,results){
if(err)return res.cc(err)
if(results.length>0)return res.cc(‘用户名已占用’)
//加密
userinfo.password=bcrypt.hashSync(userinfo.password,10)
//注册新用户
const newUserSql=‘insert into ev_users set ?’
db.query(newUserSql,{username:userinfo.username,password:userinfo.password},(err,results)=>{
if(err)return res.cc(err)
if(results.affectedRows!==1)return res.cc(‘注册出错了’)
res.cc(err,0)
})
})
}
//登录
exports.sign=(req,res)=>{
const userinfo=req.body
let usernanmSql=‘SELECT * FROM ev_users WHERE username=?’
db.query(usernanmSql,userinfo.username,(err,results)=>{
//判断用户
if(err) return res.cc(err)
if(results.length==0) return res.cc(‘用户名不存在’)
//判断密码
const comparResults= bcrypt.compareSync(userinfo.password,results[0].password)
if(!comparResults)return res.cc(‘密码错误’)
//生成token字符串
const user={…results[0],password:‘’,user_pic:‘’}
//加密
const tokenStr=jwt.sign(user,config.jwtSecretKey,{expiresIn:‘10h’})
res.send({
status:0,
message:‘登录成功’,
token:'Bearer '+tokenStr
})
})
}
- 私有路由执行代码router-handler/userinfo.js
//导入数据库模块
const db =require(‘…/db/index’)
//导入密码模块
const bcrypt=require(‘bcryptjs’)
//查询用户信息函数
exports.getUserinfo=(req,res)=>{
//定义字符串
const sql=‘SELECT id,username,nickname,email,user_pic FROM ev_users WHERE id=?’
//执行
db.query(sql,req.user.id,(err,results)=>{
if(err) return res.cc(err)
if(results.length!==1) return res.cc(‘获取用户信息失败’)
res.send({
status:0,
message:‘获取成功’,
data:results[0]
})
})
}
//更新用户数据
exports.updataUserinfo=(req,res)=>{
//定义字符串
const sql=‘UPDATE ev_users SET id=?,nickname=?,email=? WHERE id=?’
//执行语句
《MySql面试专题》
《MySql性能优化的21个最佳实践》
《MySQL高级知识笔记》
文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图
关注我,点赞本文给更多有需要的人
tus:0,message:‘获取成功’,
data:results[0]
})
})
}
//更新用户数据
exports.updataUserinfo=(req,res)=>{
//定义字符串
const sql=‘UPDATE ev_users SET id=?,nickname=?,email=? WHERE id=?’
//执行语句
《MySql面试专题》
[外链图片转存中…(img-T05pz2DJ-1719893937237)]
[外链图片转存中…(img-mfvwPEMQ-1719893937238)]
《MySql性能优化的21个最佳实践》
[外链图片转存中…(img-9AG0bp2s-1719893937238)]
[外链图片转存中…(img-PCR2wl7y-1719893937239)]
[外链图片转存中…(img-qpyCkBVR-1719893937239)]
[外链图片转存中…(img-hIWJgWPQ-1719893937240)]
《MySQL高级知识笔记》
[外链图片转存中…(img-4iG2zh5z-1719893937240)]
[外链图片转存中…(img-qEPkJZsN-1719893937241)]
[外链图片转存中…(img-LCyCDDiC-1719893937241)]
[外链图片转存中…(img-nwHPRMRC-1719893937241)]
[外链图片转存中…(img-dyWKzGVX-1719893937242)]
[外链图片转存中…(img-xgsKJLTX-1719893937242)]
[外链图片转存中…(img-XWuRhfcM-1719893937242)]
[外链图片转存中…(img-18iuTa45-1719893937243)]
[外链图片转存中…(img-gwHvXqbD-1719893937243)]
[外链图片转存中…(img-RfrLa7jx-1719893937243)]
文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图
[外链图片转存中…(img-4hLVjAo7-1719893937244)]
关注我,点赞本文给更多有需要的人