当前位置: 首页 > Web前端 > HTML

多人博客后台管理系统DAY05

时间:2023-03-28 14:13:40 HTML

(5)项目功能实现的用户信息修改用户修改和添加用户类似,不同的是id会返回到编辑页面,显示用户的IdBLOG--源码目录└──model--数据库操作├──public--静态资源└──route--路由└──admin--博客管理├──user-modify.js--用户修改功能路由└──user-edit.js--用户编辑功能路由└──admin。js--博客管理页面路由└──views--模板└──admin--博客管理页面美工模板├──user-edit.art--用户编辑页面└──user.art--用户列表页面└──app.js--创建网站服务user.art在地址栏赋id参数,区分添加和修改/admin/user-edit?id={{@$value._id}}···{{每个用户}}{{@$value._id}}{{$value.username}}{{$value.电子邮件}}}}/td>{{$value.role=='admin'?'超级管理员':'普通用户'}}{{$value.state==0?'启用':'禁用'}}<ahref="/admin/user-edit?id={{@$value._id}}"class="glyphiconglyphicon-edit">{{/each}}···user-edit.js获取地址栏中的id参数,如果存在则修改操作引入用户的集合构造函数,根据findOne查找用户,将用户的信息渲染到用户的edit中页面区分表单的提交地址,添加修改不同的Links,按钮也是const{User}=require('../../model/user');module.exports=async(req,res)=>{//获取地址栏中的id参数const{message,id}=req.query;//如果当前传递的是id参数if(id){//修改操作letuser=awaitUser.findOne({_id:id});//渲染用户编辑页面(修改)res.render('admin/user-edit',{message:message,user:user,link:'/admin/user-modify?id='+id,按钮:“修改”});}else{//添加操作res.render('admin/user-edit',{message:message,link:'/admin/user-edit',button:'add'});}}user-edit.art将用户名的值添加到user.username。如果是添加操作,会因为没有渲染user而报错,所以利用user&&user.username的短路特性来避免报错。对于邮箱,角色,状态,类似操作加值,区分表单的提交地址,添加修改不同的Links,按钮也是为分类标题的Id。也用来区分是否根据Button显示用户id{{extend'./common/layout.art'}}{{block'main'}}{{include'./common/header.art'}}{{include'./common/aside.art'}}{{@user&&user._id}}{{message}}

普通用户超级管理员启用禁用{{/block}}admin.js添加用户修改路由//引用expess框架constexpress=require('express');//创建博客展示页面路由constadmin=express.Router();//渲染登录页面admin.get('/login',require('./admin/loginPage'));//实现登录功能admin.post('/login',require('./admin/login'));//创建用户列表路由admin.get('/user',require('./admin/userPage'));//实现退出函数admin.get('/logout',require('./admin/logout'));//创建用户编辑页面routingadmin.get('/user-edit',require('./admin/user-edit'));//创建路由实现用户添加功能admin.post('/user-edit',require('./admin/user-edit-fn'));//用户修改函数路由admin.post('/user-modify',require('./admin/user-modify'));//将路由对象导出为模块成员module.exports=admin;user-modify.js接受客户端传递过来的请求参数(post)和待修改用户的id(get)导入到用户集合构造函数中,根据id查询加密变量的密码通过findOne,所以必须导入bcrypt模块,通过bcrypt.compare比较明文密码和数据库密码是的,返回一个布尔值。如果密码比对失败,会触发中间件,将页面重定向到user-edit,并出现提示错误信息。接下来接受字符串。如果比对成功,通过UpdateOne更新修改后的用户信息,不能修改密码,所以不能写入密码。传递一个const结构,然后你就不需要重复写req.body来将页面重定向到用户列表页面const{User}=require('../../model/user');constbcrypt=require('bcrypt');module.exports=async(req,res,next)=>{//接收客户端传过来的请求参数const{username,email,role,state,password}=req.身体;//待修改的用户idconstid=req.query.id;//根据id查询用户信息letuser=awaitUser.findOne({_id:id});//密码比较constisValid=awaitbcrypt.compare(password,user.password);//密码比较成功if(isValid){//res.send('密码比较成功');//更新用户信息到数据库awaitUser.updateOne({_id:id},{username:username,email:email,role:角色,状态:状态});//将页面重定向到用户列表页面res.redirect('/admin/user');}else{//密码比对失败letobj={path:'/admin/user-edit',message:'密码比对失败,无法修改用户信息',id:id}next(JSON.stringify(obj));}//密码比较//res.send(user);}app.js为错误处理中间件,如果密码比对不成功,我们希望跳转地址有?message&和id。这种情况下,我们可以通过遍历和字符串拼接来实现,比如params.pushparams.join方法//参考expess框架constexpress=require('express');//处理路径constpath=require('path');//引入body-parser模块来处理post请求参数constbodyPaser=require('body-parser');//importexpress-session模块constsession=require('express-session');//importart-tempatetemplateengineconsttemplate=require('art-template');//创建web服务器constapp=express();//数据库连接require('./model/connect');//处理post请求参数app.use(bodyPaser.urlencoded({extended:false}));//配置sessionapp.use(session({secret:'secretkey',saveUninitialized:false,cookie:{maxAge:24*60*60*1000}}));//告诉express框架模板在哪里位置app.set('views',path.join(__dirname,'views'));//告诉express框架模板默认后缀是什么app.set('viewengine','art');//当使用什么模板引擎渲染后缀为art的模板app.engine('art',require('express-art-template'));//打开静态资源文件app.use(express.static(path.join(__dirname,'public')));//导入路由模块consthome=require('./route/home');constadmin=require('./route/admin');//拦截请求判断用户登录状态app.use('/admin',require('./middleware/loginGuard'));//匹配请求路径为路由app.use('/home',home);app.use('/admin',admin);app.use((err,req,res,next)=>{//将字符串对象转换为对象类型//JSON.parse()constresult=JSON.parse(err);//{path:'/admin/user-edit',message:'密码比较失败,无法修改用户信息',id:id}letparams=[];for(letattrinresult){if(attr!='path'){params.push(attr+'='+result[attr]);}}res.redirect(`${result.path}?${params.join('&')}`);})//监听端口app.listen(80);console.log('Web服务器启动成功,请访问localhost')

猜你喜欢