SuperAPI AI 工具集

cloudbase-document-database-web-sdk

编程与开发

查看项目

更新于 10-16 08:52

技能介绍

用途

本技能覆盖浏览器端通过 @cloudbase/js-sdk 使用 CloudBase 文档数据库(NoSQL 集合)的场景。当浏览器或 Web 应用需要读取、写入 CloudBase 文档数据库数据,或请求中涉及 app.database()、db.collection()、.where()、.watch()、分页、聚合、地理位置查询时,应优先使用本技能。

主要能力

  • Web 应用中的 CRUD 操作
  • 复杂查询与分页
  • 聚合
  • 通过 watch() 实现实时监听
  • 地理位置查询

使用方式

标准初始化:

import cloudbase from "@cloudbase/js-sdk";

const app = cloudbase.init({
  env: "your-env-id"
});

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

重要规则:

  • 若集合规则要求身份,查询前需先登录。
  • 保持单一共享的 app/database 实例。
  • 除非框架确实需要,不要将初始化隐藏在临时的异步加载器中。

快速路由(配套参考文件):

  • CRUD -> ./crud-operations.md
  • 复杂查询 -> ./complex-queries.md
  • 分页 -> ./pagination.md
  • 聚合 -> ./aggregation.md
  • 实时监听 -> ./realtime.md
  • 地理位置 -> ./geolocation.md
  • 安全规则 -> ./security-rules.md

示例:

简单查询:

const result = await db.collection("todos")
  .where({ completed: false })
  .get();

创建并获取文档 ID:

const result = await db.collection("posts").add({
  title: "New article",
  content: "...",
  createdAt: new Date()
});

const articleId = result._id;

有序分页:

const result = await db.collection("posts")
  .orderBy("createdAt", "desc")
  .skip(20)
  .limit(10)
  .get();

字段选择:

const result = await db.collection("users")
  .field({ name: true, email: true, _id: false })
  .get();

错误处理:

try {
  const result = await db.collection("todos").get();
  console.log(result.data);
} catch (error) {
  console.error("Database error:", error);
}

适用场景

  • 浏览器或 Web 应用需要读写 CloudBase 文档数据库数据。
  • 任务明确要求“修改代码”或“使用 SDK”,或实现应用/前端逻辑。
  • 任务涉及 db.collection().add()、.get()、.update() 等具体 SDK 方法。
  • 上下文中已有 Web 项目及 SDK 初始化(如 index.js 已包含 cloudbase.init())。

限制与不适用场景

  • 使用 wx.cloud.database() 的小程序代码。
  • 服务端或云函数数据库访问。
  • SQL / MySQL 数据库操作。
  • 不涉及浏览器 SDK 代码的纯资源权限管理。
  • 任务明确要求放入 CloudBase PostgreSQL(CloudBase PG)的新业务表:应先调用 queryEnv(action="info", envId=...) 并读取 EnvInfo.RuntimeBackends;若 postgresql === true 且任务要求新业务表放在 PG,则改用 postgresql-development-cloudbase 技能(通过 app.rdb()、PG 行级安全 CREATE POLICY,以及 app.storage.from('<bucket>').upload('<key>', file) 上传到显式创建的 pgstore bucket)。同一环境中已有的 NoSQL 集合仍使用本技能,PG 与 NoSQL 在 CloudBase PG 环境中可共存。

常见错误

  • 在集合规则要求身份时,用户尚未登录就进行查询。
  • 在浏览器代码中使用 wx.cloud.database() 或 Node SDK 模式。
  • 使用动态导入懒初始化 CloudBase,而非共享的同步 app 实例。
  • 将安全规则视为结果过滤器而非请求校验器。
  • 期望 CUSTOM 安全规则在调用 managePermissions(updateResourcePermission) 后立即生效:后端会缓存规则评估器 2–5 分钟,规则变更后的首次写入可能静默失败或返回 DATABASE_PERMISSION_DENIED,即使表达式正确。可等待几分钟后重试同一写入,或通过每次写入读取 result.code / result.message 并对刚写入的 _id 做 get() 往返验证;不要将已 resolve 的 promise 视为成功。
  • 误读 db.collection(...).add(...) 的返回结构:CloudBase Web SDK 中新建文档 ID 位于顶层 result._id,而非 result.id、result.data.id 或 result.insertedId。
  • 对需要应用级管理员编辑/删除全部记录、编辑者仅能编辑/删除自己记录的 CMS 风格集合,不要将规则过度简化为 READONLY。已验证的模式是 CUSTOM 规则,通过 auth.uid 从 user_roles 读取 role,并结合 doc.authorId == auth.uid,前端写入可保持 .doc(id).update() / .doc(id).remove()。
  • 对较大集合忘记分页或索引。

最小检查清单

  1. 确认这是浏览器端文档数据库工作。
  2. 初始化 CloudBase 一次并复用同一 app / db 实例。
  3. 在 CRUD 前确认认证预期。
  4. 针对具体操作阅读正确的配套参考文件。

最佳实践

  • 在应用代码中定义集合级类型或模型包装器。
  • 使用有意义的集合命名约定。
  • 仅选择所需字段。
  • 为频繁过滤或排序键添加索引。
  • 将前端 CRUD 与明确的权限设计配对。
  • 使用分页而非无界读取。
  • 数据库错误必须转化为可读的 UI 或应用错误,而非静默失败。
  • 对于写入,默认不要将已 resolve 的 promise 视为成功,应检查写入结果字段(如 updated / deleted)或暴露的 code / message。

配套技能

同级 CloudBase 技能与本技能一同提供,使用本地相对路径(如 ../auth-web-cloudbase/SKILL.md)。若引用的同级技能文件在当前环境中缺失,请让用户安装完整的 CloudBase 插件(或缺失的技能)。不要将远程技能或协议 markdown 通过 HTTP 拉取到 agent 上下文中。

  • Web 登录与调用方身份 -> ../auth-web-cloudbase/SKILL.md
  • 通用 Web 应用结构 -> ../web-development/SKILL.md
  • 小程序数据库代码 -> ../cloudbase-document-database-in-wechat-miniprogram/SKILL.md