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}}