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

一、云函数

云函数 在传统开发模式中充当的角色就是接口。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"表成功。(表名不可重复)

相关推荐
canonical_entropy3 小时前
一份关于“可逆计算”的认知解码:从技术细节到哲学思辨的完整指南
后端·低代码·deepseek
Insight-n8 小时前
低代码数字化时代的开发新范式
低代码·ai
麦聪聊数据2 天前
企业级数据库管理实战(七):SQL 到 API,让数据库成为团队的数据服务
数据库·sql·低代码·数据服务
allanGold2 天前
【低代码】百度开源amis
低代码·amis
阿三08122 天前
低代码+AI生态:企业数字化起步阶段的“核聚变”冲击波
人工智能·低代码
低代码布道师2 天前
少儿舞蹈小程序(18)订单确认
低代码·小程序
中杯可乐多加冰2 天前
高校迎新管理系统:基于 smardaten AI + 无代码开发实践
人工智能·低代码·语言模型·llm·vue·管理系统·无代码
xhload3d3 天前
核潜艇虚拟作战管控系统 | 图扑数字孪生
物联网·低代码·3d·智慧城市·数字孪生·三维可视化·可视化·工业互联网·工业组态·轻量化·智慧军事·智慧军用设备·核潜艇·军事科技
canonical_entropy7 天前
从同步范式到组合范式:作为双向/δ-lenses泛化的可逆计算理论
后端·低代码·领域驱动设计