Vue nodejs商城项目-登录模块
一、登录功能
后端server/routes/users.js
- var User = require('./../models/users.js');
- // 二级路由
- // 登录接口
- router.post("/login",function(req, res, next){
- // 获取参数
- var param = {
- userName:req.body.userName,
- userPwd:req.body.userPwd
- }
- User.findOne(param, function(err,doc){ // 根据用户名密码查找数据库
- if(err){
- res.json({
- status:"",
- msg:err.message
- })
- }else{
- if(doc){
- res.cookie("userId",doc.userId,{
- path:'/',
- maxAge:100*60*60
- });
- // res.cookie("userName",doc.userName,{
- // path:'/',
- // maxAge:1000*60*60
- // });
- // req.session.user = doc;
- res.json({
- status:"",
- msg:'',
- result:{
- userName:doc.userName
- }
- })
- }
- }
- })
- })
添加代理config/index.js
- proxyTable: {
- '/users/*':{ // users/路由的下一级路由
- target:'http://localhost:3000'
- }
- },
- 说明:如果是有三级路由,例'/users/cart/del',需要配置'/users/**';否则请求时会出现404错误。
前端NavHeader.vue
- methods:{
- login(){ // 点击登录
- console.log("userName:"+this.userName)
- if(!this.userName || !this.userPwd){
- this.errorTip = true;
- return
- }
- axios.post("/users/login",{
- userName:this.userName,
- userPwd:this.userPwd
- }).then((response)=>{
- let res = response.data;
- "){
- this.errorTip = false;
- this.loginModalFlag = false;
- this.nickName = res.result.userName;
- }else{
- this.errorTip = true;
- }
- })
- }
- }


二、登出功能
后端server/routes/users.j
- / 登出接口
- router.post("/logout",function(req,res,next){
- res.cookie("userId","",{
- path:"/",
- maxAge:-1 // 生命周期
- })
- res.json({
- status:"",
- msg:'',
- result:''
- })
- })
前端NavHeader.vue
- methods:{
- logOut(){ // 点击logout登出
- axios.post("/users/logout").then((response)=>{
- let res = response.data;
- "){
- this.nickName = '';
- }
- })
- }
- }
三、登录拦截功能
server/app.js
- // 捕获登录状态
- app.use(function(req,res,next){ // 进入路由之前优先进入function
- if(req.cookies.userId){ // 有cookies,说明已经登录
- next();
- }else{
- console.log("url:"+req.originalUrl);
- if(req.originalUrl =='/users/login' || req.originalUrl == '/users/logout' || req.originalUrl == '/goods/list'){ // 未登录时可以点击登录login登出logout和查看商品列表
- next();
- }else{
- res.json({
- status:'1001',
- msg:'当前未登录',
- result:''
- })
- }
- }
- })
四、校验登录
server/routes/users.js
- 登录接口添加userName的cookie
- res.cookie("userName",doc.userName,{
- path:'/',
- maxAge:1000*60*60
- });
- // 校验是否登录
- router.get("/checkLogin",function(req,res,next){
- if(req.cookies.userId){
- res.json({
- status:'0',
- msg:'',
- result:req.cookies.userName || ''
- });
- }else{
- res.json({
- status:'1',
- msg:'未登录',
- result:''
- })
- }
- })
src/components/NavHeader.vue
- mounted(){
- this.checkLogin();
- },
- methods:{
- checkLogin(){ // 检查是否登录
- axios.get("/users/checkLogin").then((response)=>{
- let res = response.data;
- if(res.status == '0'){
- this.nickName = res.result;
- }
- })
- }
- }
Vue nodejs商城项目-登录模块的更多相关文章
- Vue nodejs商城项目-项目概述
项目概况 用vue2.0 +node.js +MongonDB 做了一个商城系统 技术选型 Vue2.0+node.js+express+MongoDB+axios+vuex 构建工具 Webpack ...
- Vue nodejs商城项目- 前后端数据传递
.利用Mongoose查询MongoDB 通过mongoose插件可以简捷地从mondodb中获取数据,首先安装mongoose: cnpm install mongoose --save 使用m ...
- Vue nodejs商城项目-商品列表价格过滤和加入购物车功能
一.价格过滤功能 GoodsList.vue >>点击价格区间时发送请求 methods:{ getGoodsList(flag){ var param = { ...
- Vue nodejs商城项目-商品的分页、排序、筛选
.分页 ,要查第3页的数据,则跳过2*8条数据,然后返回8条数据. 在实现滚动加载时,页面刚一加载完成并不需要请求所有数据,当用户下拉到页面底部时,再去请求数据并拼接到商品数据列表中. 通过vue-i ...
- Vue nodejs商城项目-商品列表页面组件
data(){ return { goodsList:[], // 商品列表 priceFilter:[ // 价格区间数组 ...
- Vue nodejs商城项目-搭建express框架环境
1.express-project 搭建express框架环境 安装express generator生成器 通过生成器自动创建项目 配置分析 安装 cnpm i -g express-generat ...
- iOS不得姐项目--登录模块的布局,设置文本框占位文字颜色,自定义内部控件竖直排列的按钮
一.登录模块的布局 将一整部分切割成若干部分来完成,如图分成了三部分来完成 设置顶部状态栏为白色的方法 二.设置文本框占位文字颜色 <1>方法一与方法二实现原理是同一种,都是通过设置pla ...
- Vue nodejs商城-订单模块
一.订单列表渲染 新建OrderConfirm.vue订单确认页面,添加路由 src/router/index.js添加路由 import OrderConfirm from '@/views/Ord ...
- Vue nodejs商城-地址模块
一.地址列表渲染 ,则不可以点击. src/views/Cart.vue <a class="btn btn--red" v-bind:class="{'btn-- ...
随机推荐
- ie8点击焦点有虚线框兼容问题
a标签的: 方法一:在IE下是使用html属性:hideFoucs,在HTML标签中加上hidefocus=”true” 属性即可,但这个属性是IE私有的,Firefox是不认的. <a hre ...
- 深入理解JavaScript系列(25):设计模式之单例模式
介绍 从本章开始,我们会逐步介绍在JavaScript里使用的各种设计模式实现,在这里我不会过多地介绍模式本身的理论,而只会关注实现.OK,正式开始. 在传统开发工程师眼里,单例就是保证一个类只有一个 ...
- [译]理解 Windows UI 动画引擎
本文译自 Nick Waggoner 的 "Understand what’s possible with the Windows UI Animation Engine",已获原 ...
- (0!=0)==true? 记一个匪夷所思的问题
最近换了份工作,公司的开发框架是基于SSH自己搭建的.这个问题是我在解决一个需求的时候遇到的,其实解决这个疑惑的过程也就是读框架源码的过程,特此记录一下. 问题:ba.getState()!=CbBa ...
- Spring课程 Spring入门篇 4-5 Spring bean装配之基于java的容器注解说明--@Bean
1 解析 2.1 @bean注解定义 2.2 @bean注解的使用 2 代码演练 2.1 @bean的应用不带name 2.2 @bean的应用带name 2.3 @bean注解调用initMet ...
- 阿里巴巴国际站 网站和PC客户端都登录不了,其他电脑或手机可以
背景 昨天晚上,我还能打开阿里巴巴国际站,PC客户端也可以登录 今天早上起床打开电脑,发现国际站的网站打开不了,客户端也登录不了,提示了错误信息,但是其他电脑或手机就可以登录 原因分析 1.是不是本机 ...
- pv-err-watch
# pv-err-watch 这是一个前端监控的小工具,提供了多种信息的查询 ## 快速开始 安装`npm install pv-err-watch -S` ```js import errorWat ...
- android drag
1.Android:Drag and Drop的应用 2.Android 用户界面---拖放(Drag and Drop)(三) 3.Android 用户界面---拖放(Drag and Drop)( ...
- mybatis3 step by step 快速上手
作者:Panda Fang 出处:http://www.cnblogs.com/lonkiss/p/6895617.html 原创文章,转载请注明作者和出处,未经允许不可用于商业营利活动 官方网站 h ...
- 每天一个linux命令-uname,输出操作系统信息(内核版本、硬件架构32位/64位等)
uname命令:主要用于输出一组操作系统的信息. 这个命令比较简单也比较有意思.为什么这么说呢?输入--help后看看效果,一目了然,简单吧: 首先输出完整信息: 我们再依次来输出一下: 最后,我 ...