当前位置:   article > 正文

微信小程序云函数的开发_微信云开发函数

微信云开发函数
这个作业属于哪个课程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)
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
// 云函数入口文件
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)
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
// 云函数入口文件
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)
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
// 云函数入口文件
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);
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 返回一个字段
// 云函数入口文件
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);
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 多表联查
// 云函数入口文件
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()
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

2、流程图

在这里插入图片描述

三、问题与解决

问题一

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

问题二

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

问题三

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

四、总结

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

五、参考文献

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/570748
推荐阅读
相关标签
  

闽ICP备14008679号