小程序入门26:模拟购买(上)

66 阅读2分钟

写在前面

本篇文章是微信小程序开发入门的第二十六篇,模拟购买

首先我们把首页和详情页修改一下,把新增、编辑、删除按钮都去掉,这个代码就不贴了,删一下代码,改一下样式就可以了

模拟购买

数据库集合

打开云开发控制台,新增一个集合,取名为“fruit-order”

集合包括以下字段:

  • _id 记录id
  • fruitId 购买的水果id
  • userId 购买人的id
  • createTime 购买时间
  • num 购买数量

云函数

在项目中新建一个Nodejs云函数,取名为“fruit-order”,修改fruit-order\index.js文件:

const buy = require('./buy/index');

// 云函数入口函数
exports.main = async (event, context) => {
  switch (event.type) {
    case 'buy':
      return await buy.main(event, context);
  }
}

再在fruit-order文件夹下新增buy\index.js文件,编写代码如下:

db.serverDate()方法获取服务端时间,我们这里没有对服务器时间做格式化处理,到时小程序端给他格式化

db.command 获取指令

saleNum: _.inc(event.num), 使用指令inc,表示saleNum的值自增event.num

await Promise.all 是等里面的两个promise都执行成功后返回,第一个promise是给fruit-order集合新增一条记录,第二个promise是修改水果记录的saleNum,使saleNum自增event.num

const cloud = require('wx-server-sdk');

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
});

const db = cloud.database();
const _ = db.command

// 添加数据库记录云函数入口函数
exports.main = async (event, context) => {
  try {
    // 添加记录
    await Promise.all([
      db.collection('fruit-order').add({
        // data 字段表示需新增的 JSON 数据
        data: {
          fruitId: event.fruitId,
          userId: event.userId,
          createTime: db.serverDate(),
          num: event.num,
        }
      }),
      db.collection('fruit').where({
        _id: event.fruitId
      }).update({
        data: {
          saleNum: _.inc(event.num),
        },
      })
    ]);
    return {
      success: true,
      msg: '购买成功!'
    };
  } catch (e) {
    return {
      success: false,
      msg: '购买失败!'
    };
  }
};

上面我们让saleNum的值自增event.num,可是现在我们数据库的fruit集合中的记录还不存在saleNum字段,并且新增、编辑水果的时候也没有传这个字段,所以我们修改一下fruit文件夹下的add\index.js和edit\index.js文件的代码,修改如下:

      data: {
        ...
        saleNum: event.saleNum ? event.saleNum : 0,
        rotNum: event.rotNum ? event.rotNum : 0,
        ...
      }

修改完成后上传并部署一下,然后把所有的已经创建的水果编辑一下,saleNum和rotNum字段就有了,且值都为0

写在最后

以上就是模拟购买(上)的全部代码