对于后端这一块吧,耽误了好久,还特地去补习了SQL.
个人认为主要分为三个部分吧
1.业务逻辑
2.路由
3.数据下载
1.商品数据
业务逻辑
业务逻辑就是说要完成的什么事情
这里查询product表中所有的数据,并且保存在ctx.state.data中。
路由
路由这里把刚刚的业务逻辑和链接url绑定起来,那我们就可以通过链接访问数据库中的数据了。
下载数据
这里用赋值的方式把刚才的链接保存起来。
下载数据的话使用qcloud.request发起http请求,然后剩下的查api就好了。
2.下载详情数据
这里的detail是下载详情数据然后对查询到的数据,确保id是数字的时候后可以正确返回。正常返回的数据是一个数组,但是我们这里只有一条数据,所以适应array[0]这样的格式返回。
立即购买
这里面实现立即购买的业务逻辑,返回的是空
所以在http请求的时候,只要检测res.code是否是0就好了。
由于这里购买和用户相关,所以需要验证中间键。注意这里是post请求。
展现订单
/**
* 获取已购买订单列表
*
*/
list: async ctx => {
let user = ctx.state.$wxInfo.userinfo.openId
let list = await DB.query('SELECT order_user.id AS `id`, order_user.user AS `user`, order_user.create_time AS `create_time`, order_product.product_id AS `product_id`, order_product.count AS `count`, product.name AS `name`, product.image AS `image`, product.price AS `price` FROM order_user LEFT JOIN order_product ON order_user.id = order_product.order_id LEFT JOIN product ON order_product.product_id = product.id WHERE order_user.user = ? ORDER BY order_product.order_id', [user])
// 将数据库返回的数据组装成页面呈现所需的格式
let ret = []
let cacheMap = {}
let block = []
let id = 0
list.forEach(order => {
if (!cacheMap[order.id]) {
block = []
ret.push({
id: ++id,
list: block
})
cacheMap[order.id] = true
}
block.push(order)
})
ctx.state.data = ret
},
}
这里主要合并了order_user和order_product,product三张表格,采用left join的方式
SELECT * FROM order_user LEFT JOIN order_product ON order_user.id = order_product.order_id LEFT JOIN product ON order.product_id = product.id
最后通过user进行查询,并且按照order_product.order_id进行排序。
对应映射如下
order_user.id --> id
order_user.user --> user
order_user.create_time --> create_time
order_product.id --> product_id
order_product.count --> count
product.name --> name
product.image -->image
product.price --> price
由于这里是get请求,所以这里路由可以和刚才设置一样。