微信小程序云函数的开发

这个作业属于哪个课程2023软件工程实践W班
这个作业要求在哪里软件工程实践总结&个人技术博客
这个作业的目标课程回顾与总结
个人技术总结
其他参考文献《构建之法》

一、技术概述

1、使用场景

  • 微信小程序后端开发时使用

2、学习原因

  • 分离数据库调用功能和程序功能,程序结构更加清晰。
  • 使用云函数编写功能能够将功能细化,实现低内聚。
  • 一次编写,可多次在不同js中调用,提高代码重用率。

3、技术难点

  • 多表联合查询

二、技术详述

1、代码详解

1.1云环境配置
  • 在项目下新建一个目录
  • 指定该目录为云函数的跟目录
    在这里插入图片描述
  • 在项目的app.js文件中指定云开发的环境ID
    在这里插入图片描述
1.2 新建云函数
  • 在云函数根目录右键点击新建node.js云函数
    在这里插入图片描述

  • 在新建的云函数处右键在终端打开
    在这里插入图片描述

  • 编写云函数内容
    在这里插入图片描述

1.3 常见云函数对于数据库的增删改查
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
const db = cloud.database();
// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()//目的:获取_openid
  try {
    return await db.collection("order").add({
      data: {
        normalUser: wxContext.OPENID,//获取操作者_openid的方法
      }
    })
  } catch (e) {
    console.log(e)
  }
}
// 云函数入口文件
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 {
    return await db.collection("order").where({
      orderState:event.orderState,
    })
    .delete({
      data: {
        doneTime: event.doneTime,
        orderState: "已完成"
      }
    })
  } catch (e) {
    console.error(e)
  }
}
// 云函数入口文件
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 {
    return await db.collection("order").where({
      orderState:event.orderState,
    })
    .update({
      data: {
        doneTime: event.doneTime,
        orderState: "已完成"
      }
    })
  } catch (e) {
    console.error(e)
  }
}
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
const db = cloud.database()
// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  try {
      return await db.collection('order' ).where({
      orderState:event.orderState,
    }).get();
  } catch (e) {
    console.error(e);
  }
}
  • 返回一个字段
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
const db = cloud.database()
// 云函数入口函数

exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  try {
    //order
      return await db.collection('order').where({
      orderState:"待接单",

    })
    .field({ 'name': true })
    .get();
  } catch (e) {
    console.error(e);
  }
}
  • 多表联查
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
const db = cloud.database()
const $ = db.command.aggregate
// 云函数入口函数
exports.main = async (event, context) => {
  return await db.collection('user_record').aggregate()
    .lookup({
      from: 'user',
      localField:'open_id',
      foreignField:'open_id',
      as:'user',
    })
    .match({
      game_record_id:event.game_record_id
    })
    .replaceRoot({
      newRoot: $.mergeObjects([$.arrayElemAt(['$user', 0]), '$$ROOT'])
    })
    .project({
      _id:0,
      open_id:1,
      user_name:1,
      identity:1,
      latitude:1,
      longitude:1
    })
    .end()
}

2、流程图

在这里插入图片描述

三、问题与解决

问题一

  • 描述:微信小程序编译后白屏
  • 解决方法:对比之前开发工具的设置,发现不知何时多打了一个勾:使用独立域进行调试,去掉即可
    在这里插入图片描述

问题二

  • 描述:db.collection.count返回的对象如何提取所需要的数据
  • 解决方法:通过查询官方文档可以知道,.count().get()返回的数据是一个对象,如果此时你需要提取它的数量时,可以使用.total属性
    在这里插入图片描述

问题三

  • 描述:云开发修复时区的问题——云函数中的时区是UTC+0,所有要手动设置时区为UTC+8
  • 解决方法:
    • 给对应的云函数设置时区:云开发–云函数–对应的云函数配置环境变量:TZ+Asia/Shanghai
      在这里插入图片描述
    • 使用where条件查询+get获取
    • 使用Date()对象获取当前时间
      在这里插入图片描述

四、总结

  • 微信小程序的开发学习相对其他新技术而言还是比较容易的,因为它的开发文档是中文的原因,很多自身遇到的问题都可以在微信开发文档中找到
  • 使用云函数进行开发必须配置环境,否则会一直报错
  • 因为云函数是共享的,因此每写完一个云函数想要使用它一定要记得上传,否则是无法使用的。
  • 云函数中的名称必须一一对应,一旦名字不相同就会导致错误。

五、参考文献

参考文献1
参考文献2
参考文献3
参考文献4

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值