router
router.post(‘/user/addAddress’, initMiddleware, userauthMiddleware, controller.default.address.addAddress);
model
module.exports = app => {
const mongoose = app.mongoose;
const Schema = mongoose.Schema;
const d = new Date();
const AddressSchema = new Schema({
uid: {type: Schema.Types.ObjectId},
name: {type: String},
phone: {type: Number},
address: {type: String},
zipcode: {type: String},
default_address: {type: Number, default: 1},
add_time: {
type: Number,
default: d.getTime(),
},
});
return mongoose.model(‘Address’, AddressSchema, ‘address’);
};
controller
增加地址
app/controller/default/address.js
async addAddress() {
const uid = this.ctx.service.cookies.get(‘userinfo’)._id;
const name = this.ctx.request.body.name;
const phone = this.ctx.request.body.phone;
const address = this.ctx.request.body.address;
const zipcode = this.ctx.request.body.zipcode;
const addressCount = await this.ctx.model.Address.find({uid}).count();
if (addressCount > 20) {
this.ctx.body = {
success: false,
result: ‘ 增加收货地址失败 收货地址数量超过限制 ’,
};
} else {
await this.ctx.model.Address.updateMany({uid}, {default_address: 0});
const addressModel = new this.ctx.model.Address({uid, name, phone, address, zipcode});
await addressModel.save();
const addressList = await this.ctx.model.Address.find({uid}).sort({default_address: -1});
this.ctx.body = {
success: true,
result: addressList,
};
}
}
显示地址
app/controller/default/buy.js
async checkout() {
// 获取购物车选中的商品
const orderList = [];
let allPrice = 0;
const cartList = this.service.cookies.get(‘cartList’);
if (cartList && cartList.length > 0) {
for (let i = 0; i < cartList.length; i++) {
if (cartList[i].checked) {
orderList.push(cartList[i]);
allPrice += cartList[i].price * cartList[i].num;
}
}
// 获取当前用户的所有收货地址
const uid = this.ctx.service.cookies.get(‘userinfo’)._id;
const addressList = await this.ctx.model.Address.find({uid}).sort({default_address: -1});
await this.ctx.render(‘default/checkout.html’, {
orderList,
allPrice,
addressList,
});
} else {
// 恶意操作
this.ctx.redirect(‘/cart’);
}
}
view
app/view/default/checkout.html
<div id=”addressList”>
<%for(var i=0;i<addressList.length;i++){%>
<div class=”address-item J_addressItem <%if(addressList[i].default_address){%>selected <%}%>” data-id=”<%=addressList[i]._id%>” data-name=”<%=addressList[i].name%>” data-phone=”<%=addressList[i].phone%>” data-address=”<%=addressList[i].address%>”>
<dl>
<dt> <em class=”uname”><%=addressList[i].name%></em> </dt>
<dd class=”utel”>
<%=addressList[i].phone%>
</dd>
<dd class=”uaddress”>
<%=addressList[i].address%>
</dd>
</dl>
<div class=”actions” data-id=”<%=addressList[i]._id%>”>
<a href=”javascript:void(0);” class=”modify addressModify”> 修改 </a>
</div>
</div>
<%}%>
</div>
<script>
$(function() {
$(‘#addAddressButton’).click(function() {
var name = $(‘#add_name’).val();
var phone = $(‘#add_phone’).val();
var address = $(‘#add_address’).val();
var zipcode = $(‘#add_zipcode’).val();
// 判断格式是否正确 - 自己完善
if (name == ” || phone == “” || address == “”) {
alert(‘ 格式不正确 ’)
return false;
}
//csrf
$.post(‘/user/addAddress’, {
name: name,
phone: phone,
address: address,
zipcode: zipcode
}, function(response) {
console.log(response);
var addressList = response.result;
var str = ”;
if (response.success == true) {
for (var i = 0; i < addressList.length; i++) {
if (addressList[i].default_address) {
str += ‘<div class=”address-item J_addressItem selected” data-id=”‘ + addressList[i]._id + ‘” data-name=”‘ + addressList[i].name + ‘” data-phone=”‘ + addressList[i].phone + ‘” data-address=”‘ + addressList[i].address + ‘” > ‘;
str += ‘<dl>’;
str += ‘<dt> <em class=”uname”>’ + addressList[i].name + ‘</em> </dt>’;
str += ‘<dd class=”utel”>’ + addressList[i].phone + ‘</dd>’;
str += ‘<dd class=”uaddress”>’ + addressList[i].address + ‘</dd>’;
str += ‘</dl>’;
str += ‘<div class=”actions”>’;
str += ‘<a href=”javascript:void(0);” data-id=”‘ + addressList[i]._id + ‘” class=”modify addressModify”> 修改 </a>’;
str += ‘</div>’;
str += ‘</div>’;
} else {
str += ‘<div class=”address-item J_addressItem” data-id=”‘ + addressList[i]._id + ‘” data-name=”‘ + addressList[i].name + ‘” data-phone=”‘ + addressList[i].phone + ‘” data-address=”‘ + addressList[i].address + ‘” > ‘;
str += ‘<dl>’;
str += ‘<dt> <em class=”uname”>’ + addressList[i].name + ‘</em> </dt>’;
str += ‘<dd class=”utel”>’ + addressList[i].phone + ‘</dd>’;
str += ‘<dd class=”uaddress”>’ + addressList[i].address + ‘</dd>’;
str += ‘</dl>’;
str += ‘<div class=”actions”>’;
str += ‘<a href=”javascript:void(0);” data-id=”‘ + addressList[i]._id + ‘” class=”modify addressModify”> 修改 </a>’;
str += ‘</div>’;
str += ‘</div>’;
}
}
// 增加
$(“#addressList”).html(str);
} else {
alert(‘ 增加失败 ’);
}
$(‘#addAddress’).modal(‘hide’);
})
})
})
</script>
效果