Vue+Node实现的商城用户管理功能示例


Posted in Javascript onDecember 23, 2019

本文实例讲述了Vue+Node实现的商城用户管理功能。分享给大家供大家参考,具体如下:

1、用户登陆

前端将用户输入的用户名密码post发送到后端,如果返回status=0,代表登陆成功,将hasLogin置为true,控制页面登陆按钮不显示,并显示返回的用户名nickname

login(){
     if(!this.username||!this.password){
      this.errMsg="请输入用户名与密码!";
      this.errShow=true;
     }else{
      axios.post('/users/login',{
       username:this.username,
       password:this.password
      }).then((response,err)=>{
       let res=response.data;
       if(res.status===0){
        this.hasLogin=true;
        this.nickname=res.result;
        this.closeLogin();
       }else{
        this.errShow=true;
        this.errMsg=res.msg;
       }
      })
     }
    },

后端根据前端传来的用户名、密码在数据库中查找指定条目,查询成功返回status=0,并设置res的cookie保存用户名与Id

router.post('/login', function(req, res, next) {
 let username=req.body.username;
 let password=req.body.password;
 let params={
  userName:username,
  userPwd:password
 };
 user.findOne(params,(err,userDoc)=>{
  "use strict";
  if(err){
   res.json({
    status:1,
    msg:err.message
   })
  }else {
   if(userDoc){
    //登陆成功后设置res.cookie与req.session
    res.cookie('userId',userDoc.userId,{
     maxAge:1000*60*60
    });
    res.cookie('userName',userDoc.userName,{
     maxAge:1000*60*60
    });
    res.json({
     status:0,
     msg:'登陆成功',
     result:userDoc.userName
    });
   }else{
    res.json({
     status:1,
     msg:'用户名或密码错误!'
    });
   }
  }
 })
});

2、服务器Express全局拦截

一些内容在用户未登录是无法访问的,需要服务器对非法请求进行拦截。在nodejs中请求先到达app.js文件,然后再转发到指定路由。在转发之前,可以先对用户登陆状态进行判断,如果cookies中有设置userId,表明已登陆,执行下一步next()。如果未登录,只可以访问指定的路由路径,由req.originalUrl判断是否等于或包含允许的访问路径,用户在未登录时可以访问登陆页面与商品列表页面。如果访问其他路径则返回错误信息“用户未登录”:

//全局拦截
app.use(function (req,res,next) {
 if(req.cookies.userId) next();    //已登陆
 //未登录,只能访问登录与商品页面
 else if(req.originalUrl==='/users/login'||req.originalUrl.indexOf('/goods')>-1) next();
 else{
  res.json({
   status:3,
   msg:'用户未登录'
  })
 }
});
//路由跳转
app.use('/', index);
app.use('/users', users);
app.use('/goods', goods);

3、校验登陆

在页面加载完成后,需要判断用户是否已经登陆过了,前端向后端发出checkLogin的请求,后端根据cookie中的userId是否设置,返回判断信息,如果登陆则不需要用户再次手动登陆了

router.get('/checkLogin',(req,res)=>{
 "use strict";
 if(req.cookies.userId){      //设置了cookie,用户已登陆
  res.json({
   status:0,
   msg:"登录成功",
   username:req.cookies.userName
  })
 }else {
  res.json({
   status:3,
   msg: "未登录"
  })
 }
});

4、登出

用户的登出操作就是将cookie信息去除,即在后台将用户cookie的有效期置为0

router.get('/logout',(req,res)=>{
 "use strict";
 res.cookie('userId','',{maxAge:0});
 res.cookie('userName','',{maxAge:0});
 res.json({
  status:0,
  msg:'登出成功!'
 })
});

希望本文所述对大家node.js程序设计有所帮助。

Javascript 相关文章推荐
你可能不再需要JQUERY
Mar 09 Javascript
JS中style属性
Oct 11 Javascript
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
Jun 28 Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
Nov 23 Javascript
上传文件返回的json数据会被提示下载问题解决方案
Dec 03 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
Jun 11 Javascript
JS实现弹性菜单效果代码
Sep 07 Javascript
利用Vue.js指令实现全选功能
Sep 08 Javascript
javascript ASCII和Hex互转的实现方法
Dec 27 Javascript
Node使用Sequlize连接Mysql报错:Access denied for user ‘xxx’@‘localhost’
Jan 03 Javascript
Vue源码中要const _toStr = Object.prototype.toString的原因分析
Dec 09 Javascript
JS如何实现动态添加的元素绑定事件
Nov 12 Javascript
java遇到微信小程序 "支付验证签名失败" 问题解决
Dec 22 #Javascript
webpack打包html里面img后src为“[object Module]”问题
Dec 22 #Javascript
node.js事件轮询机制原理知识点
Dec 22 #Javascript
javascript实现fetch请求返回的统一拦截
Dec 22 #Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
Dec 22 #Javascript
判断JavaScript中的两个变量是否相等的操作符
Dec 21 #Javascript
javascript中的相等操作符(==与===区别)
Dec 21 #Javascript
You might like
《PHP编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
二进制交叉权限微型php类分享
2014/02/07 PHP
php使用Jpgraph创建折线图效果示例
2017/02/15 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
Javascript Tab 导航插件 (23个)
2009/06/11 Javascript
Mootools 1.2教程(21)——类(二)
2009/09/15 Javascript
有道JavaScript监听浏览器的问题
2010/06/23 Javascript
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
JQuery实现动态表格点击按钮表格增加一行
2014/08/24 Javascript
基于jQuery实现仿淘宝套餐选择插件
2015/03/04 Javascript
jQuery EasyUI 获取tabs的实例解析
2016/12/06 Javascript
jQuery Ajax全解析
2017/02/13 Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
2017/03/10 Javascript
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
jquery应用实例分享_实现手风琴特效
2018/02/01 jQuery
axios 封装上传文件的请求方法
2018/09/26 Javascript
vue 页面跳转的实现方式
2021/01/12 Vue.js
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
Python实现一个简单的验证码程序
2017/11/03 Python
TensorFlow Session使用的两种方法小结
2018/07/30 Python
Python字典中的键映射多个值的方法(列表或者集合)
2018/10/17 Python
python 使用正则表达式按照多个空格分割字符的实例
2018/12/20 Python
python中比较两个列表的实例方法
2019/07/04 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
哈萨克斯坦最大的时装、鞋子和配饰在线商店:Lamoda.kz
2019/11/19 全球购物
数据库方面面试题
2012/04/22 面试题
大学生村官心得体会范文
2014/01/04 职场文书
讲座主持词
2014/03/20 职场文书
小学数学教学经验交流材料
2014/05/22 职场文书
教师个人自我剖析材料
2014/09/29 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
淘宝客服专员岗位职责
2015/04/07 职场文书
人工作失职检讨书
2015/05/05 职场文书
「睡美人」爱洛公主粘土人开订
2022/03/22 日漫
Golang 链表的学习和使用
2022/04/19 Golang