微信小程序云开发 - 云函数

721 阅读2分钟

云函数

官方参考文档:developers.weixin.qq.com/miniprogram…

云函数基本用法

开始之前,可以将模板自动创建的云函数删除了,重新创建,便于学习。

如果遇到cloudfunctions|当前环境:undefined这种情况,说明你并没有开通云开发,所以找不到。如果开通了还是出现,请尝试重新启动项目 - 左上角(项目 - 重新打开此项目)

这里举两种方式

1.单个文件方式

随意取的名字,不要在意😁

选择项目文件夹 - cloudfunctions

右键单击,选择新建Node.js云函数

命名getUser等待创建完毕

创建完毕会生成带有三个文件的文件夹

config.json

index.js

package.json

不用管两个json文件,只需要看index.js即可

创建

index.js

// getUser/index.js
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
// 上面两行代码是默认的,什么都不用改// 云函数入口函数
exports.main = async (event, context) => {
   // cloud.getWXContext()获取小程序用户信息
  const wxContext = cloud.getWXContext()
​
  return {
    event,
    openid: wxContext.OPENID,
    appid: wxContext.APPID,
    unionid: wxContext.UNIONID,
  }
}
调用

到这里模板已经介绍完毕,下面就是做一些云函数调用了

// demo.js
page({
    // 调用
    getUserInfo(){
        wx.cloud.callFunction({
            name:"getUser",// name必须跟你创建的云函数名保持一致
            data:{},//如果没有参数可以不用写
            success(res){
                console.log("请求成功",res)
            },
            error(err){
                console.log("请求失败",err)
            }
        })
    }
})
使用云函数连接数据库

const db = cloud.database();

const _ = db.command;

// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
const db = cloud.database();// 连接数据库
const _ = db.command;//初始化command方法 - 用于数据库操作// 云函数入口函数
exports.main = async (event, context) => {
  try {
    let getData = await db.collection("demolist").get();
    return getData
  } catch (error) {
    return {error: error.message}
  }
}

同样的调用方法,数据库操作命令也是一样的

2.多文件聚合 - 官方模板

目录结构

原先的:

cloudfunctions

getUser

config.json

index.js

package.json

getData

config.json

index.js

package.json

现在的:

cloudfunctions

user

login

index.js

rename

index.js

。。。

config.json

index.js

package.json

类似于这种的,写法并没有什么很大的差别

创建

cloudfunctions

user

getUserInfo

index.js

config.json

index.js

package.json

//user/index.js
// 云函数入口文件
const cloud = require('wx-server-sdk')
​
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
const getUserInfo = require("./getUserInfo/index");//引入要调用的文件// 云函数入口函数
exports.main = async (event, context) => {
  
  switch(event.type){
    case "getUser"://名字就是匹配条件
      return await getUserInfo.main(event,context)
  }
}
​
//user/getUserInfo/index.js
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  return {
    event,
    openid: wxContext.OPENID,
    appid: wxContext.APPID,
    unionid: wxContext.UNIONID,
  }
}

上传并部署就完毕了

调用
page({
    getOpenid(){
    wx.cloud.callFunction({
      name:"user",
      data:{
        type:"getUser"//要匹配的项
      },
      success(res){
        console.log("请求成功",res);
      },
      error(err){
        console.log("请求失败",err);
      }
    })
  },
})

后面基本采用同样的方式,不管是数据库请求,还是多个云函数