微搭低代码教程四:云函数、云数据库

一、云函数

云函数 在传统开发模式中充当的角色就是接口。API 调用云函数,云函数去操作数据库后把返回值响应给页面。


二、创建云函数

您可以在 云开发开放平台 单击云函数 > 新建云函数
  • 1 新建云函数
  • 2 在线开发
在线开发云函数

本例云函数为"executorHandler",在该目录中:

  • node_modules 为该云函数的依赖,需要通过 npm install xx 去安装相关依赖
  • index.js 云函数主文件(在该文件中编写业务代码增、删、改、查)
  • package.json 该云函数配置

二、编写云函数

  • 新增 add()
  • 删除 remove()
  • 更新 aupdate()
  • 查询 get()

2.1 引入及初始化

js 复制代码
const cloud = require("wx-server-sdk");
cloud.init({
      env: "dev-1234567890", // 使用当前云环境
});

const db = cloud.database();
const _ = db.command;

2.2 新增

场景:往数据库表"user"添加一个用户

js 复制代码
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"表中删除某一个用户

js 复制代码
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"表中更新某一个用户的状态

js 复制代码
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"的数据

js 复制代码
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"表成功。(表名不可重复)

相关推荐
驰骋工作流3 小时前
一份 BPM 平台能力对标清单:25 个评估维度的横向观察驰骋BPM驰骋低代码低代码工作流引擎
低代码
ebok.6 小时前
低代码平台如何集成 AI:从开发侧到运行侧的技术实践与京微智枢方案
人工智能·低代码·ai·rxjava
窗边看云20 小时前
波次拣货的分工:三个人怎么不撞车
低代码
ZKNOW甄知科技1 天前
燕千云迭代版本发布:智能Agent深入业务现场
运维·人工智能·低代码·机器学习·自然语言处理·自动化·aigc
她的男孩1 天前
条件分支两边审批一样,却发成两份待办:Forge Admin 审批设计器的公共节点合并
spring boot·低代码·工作流引擎
驰骋工作流2 天前
低代码平台的评估指标:从「上层建筑 / 基座」两层看驰骋BPM驰骋低代码低代码工作流引擎
低代码
驰骋工作流2 天前
菜单的类型:为什么「菜单」需要分类——结合驰骋 GPN_Menu 的设计驰骋BPM驰骋低代码低代码工作流引擎
低代码
SL_staff3 天前
私有化低代码运维三重雷区:JVS开源栈中的Kafka/ES/RabbitMQ治理实践
java·低代码·全栈
快乐非自愿3 天前
低代码落地费控系统:从报销流程到业财闭环的实操方案
android·低代码·rxjava·ai低代码
她的男孩3 天前
页面已发布用户仍进不去:Forge Admin 门户入口与系统菜单挂载解耦
java·spring boot·低代码