写在前面
本篇文章是微信小程序开发入门的第二十六篇,模拟购买
首先我们把首页和详情页修改一下,把新增、编辑、删除按钮都去掉,这个代码就不贴了,删一下代码,改一下样式就可以了
模拟购买
数据库集合
打开云开发控制台,新增一个集合,取名为“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
写在最后
以上就是模拟购买(上)的全部代码