微搭低代码教程四:云函数、云数据库
一、云函数
-
云函数即在云端(服务器端)运行的函数:
- 在物理设计上,一个云函数可由多个文件组成,占用一定量的CPU 内存等计算资源;
- 各云函数完全独立,可分别部署在不同的地区;
- 开发者无需购买、搭建服务器,只需编写函数代码并部署到云端即可在小程序端调用;
- 同时云函数之间也可互相调用
-
云函数的编写方式:
- 一个云函数的写法与一个在本地定义的 JavaScript 方法无异,代码运行在云端 Node.js 中;
- 当云函数被小程序端调用时,定义的代码会被放在Node.js 运行环境中执行;
- 我们可以如在 Node.js 环境中使用 JavaScript 一样在云函数中进行网络请求等操作,而且我们还可以通过云函数后端 SDK搭配使用多种服务,比如使用云函数 SDK 中提供的数据库和存储 API进行数据库和存储的操作
-
云开发的云函数的独特优势在于与微信登录鉴权的无缝整合
- 当小程序端调用云函数时
云函数的传入参数中会被注入小程序端用户的 openid,开发者无需校验 openid 的正确性因为微 信已经完成了这部分鉴权,开发者可以直接使用该 openid
。
- 当小程序端调用云函数时
云函数
在传统开发模式中充当的角色就是接口。API 调用云函数,云函数去操作数据库后把返回值响应给页面。
二、创建云函数
您可以在 云开发开放平台 单击云函数 > 新建云函数
- 1 新建云函数
- 2 在线开发
在线开发云函数
本例云函数为“executorHandler”,在该目录中:
- node_modules 为该云函数的依赖,需要通过 npm install xx 去安装相关依赖
- index.js 云函数主文件(在该文件中编写业务代码增、删、改、查)
- package.json 该云函数配置
二、编写云函数
- 新增
add()
- 删除
remove()
- 更新
aupdate()
- 查询
get()
2.1 引入及初始化
const cloud = require("wx-server-sdk");
cloud.init({
env: "dev-1234567890", // 使用当前云环境
});
const db = cloud.database();
const _ = db.command;
2.2 新增
场景:往数据库表“user”添加一个用户
const cloud = require("wx-server-sdk");
cloud.init({
env: "dev-1234567890", // 使用当前云环境
});
const db = cloud.database();
const _ = db.command;
exports.main = async (event, context) => {
// event 为 APIs 传入的参数;context 为环境变量,包含了openId、appId等
const { api } = event;
switch (api) {
// 新增
case "onAdd":
return await onAddHandler(event, context);
default:
return {
code: -1,
msg: "api not found",
};
}
};
// 新增
async function onAddHandler(event, context) {
const transaction = await db.startTransaction(); // 开始事务
let result;
try {
result = await transaction.collection("user").add({
data: [{
openid: context.OPENID,
name: event.userName,
status: event.status,
createTime: Date.now()
}]
});
transaction.commit(); // 提交事务
} catch (error) {
transaction.rollback();
throw new Error("unknwon error");
}
return result;
}
2.3 删除
场景:在数据库“user”表中删除某一个用户
const cloud = require("wx-server-sdk");
cloud.init({
env: "dev-1234567890", // 使用当前云环境
});
const db = cloud.database();
const _ = db.command;
exports.main = async (event, context) => {
// event 为 APIs 传入的参数;context 为环境变量,包含了openId、appId等
const { api } = event;
switch (api) {
// 删除
case "onDelete":
return await onDeleteHandler(event, context);
default:
return {
code: -1,
msg: "api not found",
};
}
};
// 删除
async function onDeleteHandler(event, context) {
const transaction = await db.startTransaction(); // 开始事务
let result;
try {
result = await transaction.collection("user")
.where({
_id: event._id
})
.remove();
transaction.commit(); // 提交事务
return {
code: 0,
message: '删除成功',
data: result
};
} catch (error) {
transaction.rollback();
throw new Error("unknwon error");
}
return result;
}
2.4 更新
场景:在数据库“user”表中更新某一个用户的状态
const cloud = require("wx-server-sdk");
cloud.init({
env: "dev-1234567890", // 使用当前云环境
});
const db = cloud.database();
const _ = db.command;
exports.main = async (event, context) => {
// event 为 APIs 传入的参数;context 为环境变量,包含了openId、appId等
const { api } = event;
switch (api) {
// 更新
case "onUpdate":
return await onUpdateHandler(event, context);
default:
return {
code: -1,
msg: "api not found",
};
}
};
// 更新
async function onUpdateHandler(event, context) {
const transaction = await db.startTransaction(); // 开始事务
let result;
try {
result = await transaction.collection("user")
.where({
_id: event._id
})
.update({
data: {
STATUS: "1",
UPDATE_TIME: Date.now()
}
});
transaction.commit(); // 提交事务
return {
code: 0,
message: '更新成功',
data: result
};
} catch (error) {
transaction.rollback();
throw new Error("unknwon error");
}
return result;
}
2.5 查询
场景:查询数据库表“user”中所有状态为“1”的数据
const cloud = require("wx-server-sdk");
cloud.init({
env: "dev-1234567890", // 使用当前云环境
});
const db = cloud.database();
const _ = db.command;
exports.main = async (event, context) => {
// event 为 APIs 传入的参数;context 为环境变量,包含了openId、appId等
const { api } = event;
switch (api) {
// 查询
case "onGet":
return await onGetListHandler(event, context);
default:
return {
code: -1,
msg: "api not found",
};
}
};
// 查询
async function onGetListHandler(event, context) {
let result = await transaction.collection("user")
.where({
status: "1"
})
.get();
return result;
}
2.6 调试 & 部署
右键点击云函数,可以对云函数进行调试和部署。测试云函数是否通过,点击“调试”;通过 APIs 方式联调前,需对云函数进行部署。
三、云数据库
在这里,数据库我们选择“文档型”。
集合名称为表名,权限设置可按实际需求选择,点击“确定”即创建“user”表成功。(表名不可重复)