【系】微信小程序云开发实战坚果商城-云开发之订单品数据实现

第 3-9 课:云开发之订单品数据实现 目录

  • 开篇
    • 【系】微信小程序云开发实战坚果商城-开篇
  • 基础篇
    • 【系】微信小程序云开发实战坚果商城-弹性盒子
    • 【系】微信小程序云开发实战坚果商城-ES6 简单入门
    • 【系】微信小程序云开发实战坚果商城-官方案例先运行
  • 前端篇
    • 【系】微信小程序云开发实战坚果商城-商城项目搭建
    • 【系】微信小程序云开发实战坚果商城-所有目录…
1 集合处理 在 fields 文件夹新建 orderField.js
// order 指定返回结果中记录需返回的字段 module.exports = { ORDERFIELD: { buyer_name: true, buyer_phone: true, buyer_address: true, order_amount: true, orderdetail: true, create_time: true, order_status: true } }

2 业务层实现
在开始的时候,订单和订单详情是分别存取的 每一个订单详情都关联了订单号,我采用的通过 node-uuid 生成ID的形式,后面再优化的时候,mongodb 非关系数据库是比较灵活的,直接把订单详情放入订单中,也更好相对比较号操作。下面的内容没有移除的原因,想告诉大家在日常使用的过程中,我们在云函数中是可以安装其他依赖的,云函数在安装的时候记得添加 --save ,写入到 package.json 不然云上是读取不到本来依赖的。
【【系】微信小程序云开发实战坚果商城-云开发之订单品数据实现】订单 id 这里我采用自己生成,因为订单详情也需要使用订单 id ,在云函数index打开客户端安装node-uuid依赖,在命令窗口输入以下命令:
npm install --savenode-uuid

node-uuid使用比较简单,如下
引入 var uuid = require('node-uuid'); // V1 是根据时间戳生成。 var uid = uuid.v1(); // V4 是随机数生成。 var uidv4 = uuid.v4();

在我们实际的开发选择 v1 ,安装之后我们继续我们订单业务层编写
注意:上面的node-uuid代码中已经移除
service/orderService.js
const model = require('../models/BaseModel.js') const { ORDER } = require('../config/tableConfig.js') const { ORDERFIELD } = require('../fields/orderField.js')//orderData,userInfo const create = (orderData, userInfo) => { let orderdetailS = [] // 添加订单详情 let create_time = new Date() let update_time = new Date() for (let product of orderData.products) { let params_order_detail = { product_id: product._id, product_name: product.product_name, product_price: product.product_sell_price, product_count: product.counts, product_img: product.product_img, create_time: create_time, update_time: update_time } orderdetailS.push(params_order_detail)} // 订单信息 let params_order = { buyer_openid: userInfo.openId, buyer_name: orderData.address.userName, buyer_phone: orderData.address.phone, buyer_address: orderData.address.detailAddress, order_amount: orderData.account, order_status: 0,// 默认未付款 create_time: new Date(), update_time: new Date(), orderdetail: orderdetailS }// 订单生成 let order = model.add(ORDER, params_order); return order } /** * 根据订单id获取订单信息 * @param {*} orderId */ const getOrderById = (orderId) => { return model.findById(ORDER, ORDERFIELD, orderId) }/** * 根据用户openid获取信息 * @param {*} userInfo */ const getOrderList = (userInfo, page = 0, size = 20, order = {}) => { order.name = 'create_time' order.orderBy = 'desc' let options = { buyer_openid: userInfo.openId } return model.query(ORDER, ORDERFIELD, options, page, size, order) }module.exports = { create, getOrderById, getOrderList }

订单处理的数据比较多,在这里我们通过前台的数据解析出来,放进我们的自己的集合中,作为演示我是之前通过前台取值存进去,如果在真实的案例中,大家需要通过从后台取出数据与前台对比,以免前台数据传入错误。
3 入口文件实现 头部引入
const order = require('service/orderService.js')

/***************************订单*****************************************/ // 生成订单 app.router('creatOrder', async (ctx, next) => { //event.data.orderData,event.userInfo ctx.data = https://www.it610.com/article/await order.create(event.data.orderData, event.userInfo) ctx.body = await returnUtil.success(ctx) await next() })// 根据订单获取信息 app.router('getOrderById', async (ctx, next) => { let orderId = event.data.orderId ctx.data = https://www.it610.com/article/await order.getOrderById(orderId) ctx.body = await returnUtil.success(ctx) await next() })// 获取订单信息 app.router('getOrderList', async (ctx, next) => { ctx.data = https://www.it610.com/article/await order.getOrderList(event.userInfo) ctx.body = await returnUtil.success(ctx) await next() })

源码地址
在搭建项目前,根据自己需要下载本系列文章的源代码
本项目源码地址:https://gitee.com/mtcarpenter/nux-shop

    推荐阅读