前面是我一些自己的理解,想要直接看使用方法快进调用部分

什么是云函数

云函数本质上就是写在云服务器上的方法,通过微信提供的api可以方便的调用进行使用

云函数官方解释

云函数是一段运行在云端的代码,无需管理服务器,在开发工具内编写、一键上传部署即可运行后端代码。

小程序内提供了专门用于云函数调用的 API。开发者可以在云函数内使用 wx-server-sdk 提供的 getWXContext 方法获取到每次调用的上下文(appid、openid 等),无需维护复杂的鉴权机制,即可获取天然可信任的用户登录态(openid)。

为什么要用云函数

一方面是对服务器的要求,云函数可以节省服务器开支,微信云服务器大约30r一个月,对于个人项目属于可以接受

安全性需求,使用操作云数据库的时候使用云函数来避免泄露
采用用户请求->云函数调用->云数据库操作->返回结果

云数据库

使用的是文档型数据库,自己体验下来对字段和接口没有那么严格的要求,一般使用json就可以进行传递和操作

云函数操作

初始化

  1. 创建云开发对象
    const cloud = require('wx-server-sdk');
    从使用sdk创建云对象
  2. 初始化对象
    cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV });
    使用init()方法初始化对象cloud.DYNAMIC_CURRENT_ENV是自动获取当前云服务环境的id

获取数据库

  1. 获取数据库引用
    const db = cloud.database();
  2. 获取 ‘questions’ 集合的引用
    const questionsCollection = db.collection('questions');
    这里获取了questions的集合(要在云数据库创建)

撰写核心功能方法

exports.main = async (event, context) =>{}即为云函数入口

  1. event是参数集合容器,data中的数据都会映射到这
    传入的参数可以使用event.你的参数名来得到,例event.questionCount
  2. context 是一个对象,存放着云函数运行的环境信息、用户身份信息等核心元数据云开发自动生成的,包含openid,APPID,ENV参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
exports.main = async (event, context) => {
try {
// 核心逻辑:直接查询questions集合的所有数据
const res = await questionsCollection.get();
//对调用集合的get()方法

// 返回结果
return {
success: true,
total: res.data.length, // 本次查询到的条数
data: res.data, // 所有查询到的题目数据
message: `成功获取 ${res.data.length} 条题目数据`
};
} catch (error) {
// 错误捕获与返回
console.error('获取questions数据失败:', error);
return {
success: false,
error: error.message,
message: '获取questions集合数据失败'
};
}
};

!温馨提示,云函数每次写完都要右键文件夹上传并部署到云服务器!

前端调用云函数

使用 wx.cloud.callFunction()来调用云函数
参数解析
name:函数名(你创建的云函数文件夹名)
data: 传入的数据,根据你云函数所使用的参数来写

1
2
3
4
5
6
7
8
9
wx.cloud.callFunction({
name: 'getQuestions',
data: {
}
}).then(res => {
console.log('查询结果:', res.result);
}).catch(err => {
console.error('调用失败:', err);
});

完整代码参考

云函数核心js代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) //
const db = cloud.database();
const questionsCollection = db.collection('questions');

exports.main = async (event, context) => {
try {
const res = await questionsCollection.get();
return {
success: true,
total: res.data.length,
data: res.data,
message: `成功获取 ${res.data.length} 条题目数据`
};
} catch (error) {
console.error('获取questions数据失败:', error);
return {
success: false,
error: error.message,
message: '获取questions集合数据失败'
};
}
};