ToolJet 集成 Supabase 数据源从连接配置到五种查询操作的完整实战指南【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJetToolJet 是一款开源的企业级内部工具与应用生成平台其 Marketplace 生态提供了可直接安装的 Supabase 数据源插件让你无需编写后端代码即可在 ToolJet 应用画布中直接读写 Supabase 数据库。本文以 version-2.50.0-LTS 版本文档 为主线结合仓库中 Supabase 插件的源码实现系统讲解凭据获取、数据源连接、查询配置以及 Get Rows / Create Row(s) / Update Row(s) / Delete Row(s) / Count Rows 五种操作的参数细节与底层原理。前置条件安装 Marketplace 插件在开始连接之前请确认你已经在 ToolJet 中完成了 Marketplace 插件的安装流程。ToolJet 的 Marketplace 支持在可视化界面中一键安装第三方数据源插件安装完成后插件会出现在数据源列表中。具体安装与使用步骤请参考 Marketplace 插件使用指南。Supabase 插件在仓库中的完整实现位于 marketplace/plugins/supabase/lib/index.ts其依赖supabase/supabase-js版本 ^2.41.1见 package.json来与 Supabase 的 PostgREST API 交互。建立连接Connection第一步获取 Supabase 凭据要连接 Supabase你需要两个关键凭据Project URLSupabase 项目的 RESTful API 端点格式形如https://project-ref.supabase.co所有数据库操作都会通过该端点转发到 PostgREST。Service Role SecretService role 密钥service_rolekey。你可以在Supabase 控制台 → Project Settings → API即 API Settings页面中找到这两个值。务必复制Service Role Secret而非 anon/public key——该密钥具有**绕过 Row Level SecurityRLS行级安全**的能力属于最高权限的服务端密钥。⚠️安全提示Service Role Secret 可以绕过 RLS 策略等同于数据库管理员权限。请仅将其存储在 ToolJet 数据源中切勿暴露在前端代码或浏览器环境里。ToolJet 插件配置已将其标记为encrypted加密存储详见 manifest.json。第二步在 ToolJet 中创建数据源建立连接有两种入口在查询面板query panel中点击Add new Data source在 ToolJet 仪表盘左侧导航进入Data Sources页面见 数据源总览。在数据源配置表单中选择Supabase数据源类型在Project URL字段填入上一步获取的项目地址在Service Role Secret字段填入 service role 密钥点击Test Connection验证凭据是否有效验证通过后点击Save保存数据源。从源码看连接过程的核心逻辑位于getConnection方法插件调用createClient(project_url, service_role_secret)创建 Supabase 客户端实例testConnection方法则通过执行supabaseClient.from().select(1)发起一次探测请求若返回res.error则抛出QueryError否则返回{ status: ok }表示连接成功见 lib/index.ts。凭据字段与加密机制数据源的字段定义在 manifest.json 中两个字段均为必填required字段 Key标签类型说明project_urlProject URLtextSupabase 项目 RESTful 端点service_role_secretService role secrettextareaencrypted: trueservice role 密钥加密存储SourceOptions类型同样声明了这两个字段见 lib/types.tsservice_role_secret在表单层与存储层都启用了加密防止密钥以明文形式落库。在查询管理器中执行 Supabase 查询完成数据源配置后就可以在应用编辑器中构建查询点击编辑器底部查询管理器中的Add按钮查询面板使用说明见 查询面板文档在数据源下拉列表中选择已配置的Supabase数据源在Operation下拉框中选择要执行的操作类型按所选操作填写**表名Table**及其他参数点击Run执行查询。查询结果的进一步加工可借助 ToolJet 的**转换Transformations**能力在查询结果返回后对其执行 JS 逻辑处理详细用法见 transformations 教程。操作分发的底层逻辑插件在run方法中根据queryOptions.operation的值进行分发读取queryOptions中对应操作的表名字段get_table_name/create_table_name/update_table_name/delete_table_name/count_table_name若表名为空则抛出Table name is required错误随后通过switch语句调用对应的私有方法见 lib/index.ts。每次查询都返回统一结构{ status: ok, data: result }出现错误时则包装为带code、hint明细的QueryError。支持的操作Supported OperationsSupabase 数据源共支持5 种操作其下拉选项定义在 operations.json 中Get RowsCreate Row(s)Update Row(s)Delete Row(s)Count RowsGet Rows查询行从指定表读取数据等价于 SQL 中的SELECT。必填参数参数说明Table数据库表名可选参数参数说明Where基于条件过滤行Sort基于列排序Limit限制返回的行数示例响应[ { id: 1, created_at: 2025-02-12T08:50:25.78041200:00, likes: 99, content: CFBR! }, { id: 4, created_at: 2025-02-12T11:34:26.62473500:00, likes: 108, content: Saved! } ]源码实现要点见 lib/index.ts查询以supabaseClient.from(table).select()为基础构建提供Where条件时会遍历过滤器数组并逐个追加过滤约束见下文“过滤器运算符映射”提供Sort时按列追加order(column, { ascending: order ascend })提供Limit时调用query.limit(Number(limit))。Create Row(s)新增行向指定表插入一行或多行数据。必填参数参数说明Table数据库表名Body要插入的数据必须为对象数组array of objects示例响应created: true源码实现要点createRows方法要求create_body非空否则抛出Body required to create rows in table随后通过JSON.parse(create_body)将字符串解析为对象数组再调用insert()写入见 lib/index.ts。操作成功后插件固定返回{ created: true }作为结果。Body 填写示例来自 operations.json 的占位提示[{text: abc, number: 123}, {text: xyz, number: 345}]Update Row(s)更新行更新表中符合条件的数据行。必填参数参数说明Table数据库表名Columns要更新的列名与对应值可选参数参数说明Where按条件限定要更新的行若不提供将更新表中所有行示例响应[ { id: 4, created_at: 2025-02-12T11:34:26.62473500:00, likes: 50, content: Saved! } ]源码实现要点见 lib/index.ts更新前会对update_column_fields做多重校验未提供列、列名为空、存在重复列名Duplicate column keys are not allowed都会抛错执行流程为“先查后更”先用select()结合Where过滤查出目标行再把待更新字段合并进每行数据{ ...data, ...columnsData }最后调用upsert()写回从而保证只更新符合条件的行因此Where不填时查询出的所有行都会被合并更新也就是全表更新使用前请务必谨慎。Delete Row(s)删除行删除表中符合条件的数据行。必填参数参数说明Table数据库表名Where按条件删除行示例响应deleted: true源码实现要点deleteRows方法以supabaseClient.from(table).delete()构建删除查询Where为必填语义虽然接口上delete_filters为可选对象但删除操作若不指定条件将删除全表数据同时支持delete_sort与delete_limit来限定删除范围见 lib/index.ts。操作成功后插件固定返回{ deleted: true }。Count Rows统计行数统计表中满足条件的行数等价于 SQL 中的COUNT。必填参数参数说明Table数据库表名可选参数参数说明Where基于条件过滤后再统计示例响应count: 2源码实现要点countRows方法调用select(count, { count: exact })发起精确计数查询可选的Where过滤器同样通过addQueryFilters追加见 lib/index.ts。返回结果若为数组会取首个元素作为计数结果。过滤器与排序运算符Where过滤条件由“列名 运算符 值”三元组构成运算符定义在 operations.json 中插件在addQueryFilters方法见 lib/index.ts中将界面上的运算符映射为 PostgREST 查询界面运算符说明底层调用等于eq(column, value)!不等于neq(column, value)小于lt(column, value)大于gt(column, value)小于等于lte(column, value)大于等于gte(column, value)is是否为指定值常用于null判断is(column, value)is not非指定值如is not nullnot(column, is, value)in值在给定列表中值需为 JSON 数组in(column, JSON.parse(value))排序字段支持两种方向ascend升序与dscend降序映射为order(column, { ascending: order ascend })。小结本文以 ToolJet 官方版本文档与仓库源码为依据完整覆盖了 Supabase 数据源插件的使用链路连接阶段从 Supabase 控制台获取 Project URL 与 Service Role Secret在 ToolJet 中完成凭据校验与加密存储查询阶段通过查询管理器选择操作、填写参数并运行查询结果可继续用 Transformations 加工五种操作Get Rows、Create Row(s)、Update Row(s)、Delete Row(s)、Count Rows 的参数表、示例响应与源码实现细节进阶细节过滤器九种运算符的 PostgREST 映射、排序方向、更新操作的“先查后更”机制以及 Service Role Secret 绕过 RLS 的安全注意事项。相关参考资源Supabase 插件源码数据源 schema 定义操作与过滤器定义Marketplace 插件总览查询面板文档【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
