node和vue实现商城用户地址模块
本文为大家分享了node和vue商城用户地址模块的实现,供大家参考,具体内容如下
server/models/user.js
varmongoose=require('mongoose') varuserSchema=mongoose.Schema({ "userId":String,//用户Id "userName":String,//用户名 "userPwd":String,//用户密码 "orderList":Array,//订单列表 "cartList":[//购物车列表 { "productId":String,//商品Id "productName":String,//商品名称 "salePrice":String,//商品价格 "productImage":String,//图片地址 "checked":String,//是否选中 "productNum":String//商品数量 } ], "addressList":[//用户地址列表 { "addressId":String, "userName":String, "streetName":String, "postCode":Number, "tel":Number, "isDefault":Boolean } ] }); //通过module.exports进行输出,这样才能加载到三个参数分别是模型名,userSchema名,管理数据库集合名 module.exports=mongoose.model("User",userSchema,"users");
server/routes/users.js
varexpress=require('express'); varrouter=express.Router(); varUser=require('./../models/user'); /*GETuserslisting.*/ router.get('/',function(req,res,next){ res.send('respondwitharesource'); }); router.get('/test',function(req,res,next){ res.send('test'); }); //登录 router.post('/login',function(req,res,next){ //获取前端传过来的参数post方式用req.Body形式获取参数 varparam={ userName:req.body.userName, userPwd:req.body.userPwd } User.findOne(param,function(err,doc){ if(err){ res.json({ status:"1", msg:err.message }); }else{ if(doc){ res.cookie("userId",doc.userId,{//将用户信息存入cookie path:'/', maxAge:1000*60*60 }); res.cookie("userName",doc.userName,{ path:'/', maxAge:1000*60*60 }); //req.session.user=doc;//将用户信息存入session res.json({ status:'0', msg:'', result:{ userName:doc.userName } }) } } }); }); //登出接口 router.post("/logout",function(req,res,next){ res.cookie("userId","",{//登出将userId设置为"" path:"/", maxAge:-1//设置位过期 }) res.json({ status:"0", msg:'', result:'' }) }) //校验用户信息 router.get("/checkLogin",function(req,res,next){ if(req.cookies.userId){ res.json({ status:'0', msg:'', result:req.cookies.userName||''//获取cookeiereq.cookies.属性 }); }else{//取不到就说明当前没有登录 res.json({ status:'1', msg:'未登录', result:'' }); } }) //查询当前用户的购物车数据 router.get("/cartList",function(req,res,next){ varuserId=req.cookies.userId; console.log(userId); User.findOne({userId:userId},function(err,doc){ if(err){ res.json({ status:'1', msg:err.message, result:'' }); }else{ if(doc){ res.json({ status:'0', msg:'', result:doc.cartList }); } } }); }); //购物车删除 router.post("/cartDel",function(req,res,next){ //获取浏览器的cookie以及用户传递过来的参数productId varuserId=req.cookies.userId,productId=req.body.productId; User.update({ userId:userId },{ $pull:{ 'cartList':{ 'productId':productId } } },function(err,doc){ if(err){ res.json({ status:'1', msg:err.message, result:'' }); }else{ res.json({ status:'0', msg:'', result:'suc' }); } }); }); //修改购物车商品数量 router.post("/cartEdit",function(req,res,next){ varuserId=req.cookies.userId,//获取用户客户端的userId productId=req.body.productId,//获取用户传的参数商品id productNum=req.body.productNum,//获取用户传的参数商品id checked=req.body.checked;//获取用户传的参数是否选中 User.update({ "userId":userId, "cartList.productId":productId},{ "cartList.$.productNum":productNum, "cartList.$.checked":checked, },function(err,doc){ if(err){ res.json({ status:'1', msg:err.message, result:'' }); }else{ res.json({ status:'0', msg:'', result:'suc' }); } }) }); //商品全选不选 router.post("/editCheckAll",function(req,res,next){ varuserId=req.cookies.userId, checkAll=req.body.checkAll?'1':'0'; User.findOne({userId:userId},function(err,user){ if(err){ res.json({ status:'1', msg:err.message, result:'' }); }else{ if(user){ user.cartList.forEach((item)=>{ item.checked=checkAll; }) user.save(function(err1,doc){ if(err1){ res.json({ status:'1', msg:err1,message, result:'' }); }else{ res.json({ status:'0', msg:'', result:'suc' }); } }) } } }); }); //用户地址模块开始----------------------------------------------------------------------------------------------- //查询用户地址接口 router.get("/addressList",function(req,res,next){ varuserId=req.cookies.userId; User.findOne({userId:userId},function(err,doc){ if(err){ res.json({ status:'1', msg:err.message, result:'' }); }else{ res.json({ status:'0', msg:'', result:doc.addressList }); } }) }); //设置默认地址 router.post("/setDefault",function(req,res,next){ varuserId=req.cookies.userId, addressId=req.body.addressId; if(!addressId){ res.json({ status:'1003', msg:'addressIdisnull', result:'' }); }else{ User.findOne({userId:userId},function(err,doc){ if(err){ res.json({ status:'1', msg:err.message, result:'' }); }else{ varaddressList=doc.addressList; addressList.forEach((item)=>{ if(item.addressId==addressId){ item.isDefault=true; }else{ item.isDefault=false; } }); doc.save(function(err1,doc1){ if(err){ res.json({ status:'1', msg:err.message, result:'' }); }else{ res.json({ status:'0', msg:'', result:'' }); } }) } }); } }); //删除地址接口 router.post("/delAddress",function(req,res,next){ varuserId=req.cookies.userId,addressId=req.body.addressId; User.update({ userId:userId },{ $pull:{//删除子文档元素 'addressList':{ 'addressId':addressId } } },function(err,doc){ if(err){ res.json({ status:'1', msg:err.message, result:'' }); }else{ res.json({ status:'0', msg:'', result:'' }); } }); }); //用户地址模块开始----------------------------------------------------------------------------------------------- module.exports=router;
vue前端部分
src/router/index.js路由
importVuefrom'vue' importRouterfrom'vue-router' importGoodsListfrom'./../views/GoodsList.vue' importCartfrom'@/views/Cart.vue' importAddressfrom'@/views/Address' Vue.use(Router); exportdefaultnewRouter({ routes:[ { path:'/', name:'GoodsList', component:GoodsList }, { path:'/cart', name:'Cart', component:Cart }, { path:'/address', name:'Address', component:Address } ] })
src/views/Address.vue
Address add ok edit delete clock question checkout
Confirmaddress - Viewyourorder
- Makepayment
- Orderconfirmation
Shippingaddress
- {{item.userName}}