问题:瑞吉外卖项目的前端内容里,在购物车中点击去结算没有跳转到订单界面,如下截图
解决方法 :在AddressBookController里,找到getDefault方法,把
queryWrapper.eq(AddressBook::getId, BaseContext.getCurrentId());
改为
queryWrapper.eq(AddressBook::getUserId, BaseContext.getCurrentId());
错误原因:由于构建查询语句匹配错误,用用户的id去匹配地址的id,从而导致查询不到对应用户的默认地址(当初没有直接复制资料,自己打,没想到出问题了。。。)
再说说我是这么解决的
解决过程:
第一步:先查找index.html页面,发现它只是做了订单的页面跳转,没有其它处理,排除出错
//跳转到去结算界面 toAddOrderPage(){ if(this.cartData.length > 0){ window.requestAnimationFrame(()=>{ window.location.href ='/front/page/add-order.html' }) } }
第二步:查看add-order.html页面,直接查看钩子函数即初始化的函数(因为:页面一跳转进来就直接跳转到另外一个页面,说明是初始化时就有问题了)
initData(){ //获取默认的地址 this.defaultAddress() //获取购物车的商品 this.getCartData() }, //获取默认地址 async defaultAddress(){ const res = await getDefaultAddressApi() if(res.code === 1){ this.address = res.data this.getFinishTime() }else{ window.requestAnimationFrame(()=>{ window.location.href = '/front/page/address-edit.html' }) } },
我们发现,这里有个获取默认地址的请求,我们ctrl+鼠标左键点击getDefaultAddressApi()
//获取默认地址 function getDefaultAddressApi() { return $axios({ 'url': `/addressBook/default`, 'method': 'get', }) }
发现这里有个ajax请求,很好,我们就可以在Controller层找问题,点开AddressBookController中,找到对应的get请求且地址映射为default的方法,随后比对就发现了问题
//查询默认地址 @GetMapping("default") public R<AddressBook> getDefault(){ LambdaQueryWrapper<AddressBook> queryWrapper = new LambdaQueryWrapper<>(); //queryWrapper.eq(AddressBook::getId, BaseContext.getCurrentId());错误的 queryWrapper.eq(AddressBook::getUserId, BaseContext.getCurrentId()); queryWrapper.eq(AddressBook::getIsDefault,1); AddressBook addressBook = addressBookService.getOne(queryWrapper); if(addressBook != null){ return R.success(addressBook); }else{ return R.error("没有找到该对象"); } }