Files
udmin/docs/variable-node-usage.md
ayou 296f0ae9f6 feat(backend): 新增 QuickJS 运行时支持 JavaScript 执行器
refactor(backend): 重构 script_js 执行器实现 JavaScript 文件/内联脚本执行
feat(backend): 变量节点支持表达式/引用快捷语法输入
docs: 添加变量节点使用文档说明快捷语法功能
style(frontend): 调整测试面板样式和布局
fix(frontend): 修复测试面板打开时自动关闭节点编辑侧栏
build(backend): 添加 rquickjs 依赖用于 JavaScript 执行
2025-09-20 17:35:36 +08:00

5.2 KiB
Raw Permalink Blame History

变量赋值节点:表达式/引用直输 使用文档

一、功能概述

  • 变量节点的右值支持三种取值方式:
    • 常量constant数字、字符串、对象、数组等原样作为值。
    • 引用ref通过路径引用上下文或其他节点的输出。
    • 表达式expression使用 Rhai 表达式,运行时计算出值。
  • 新增“快捷语法”直输能力:即便右值选择为“常量”,也可直接在输入框里写:
    • 表达式直输:以 ctx.ctx[ 开头的字符串按 Rhai 表达式求值。
    • 引用直输:以 ${...} 包裹的字符串按“引用路径”解析。

二、使用入口

  • 打开画布,选择“变量”节点,在右侧侧边栏的“赋值行”进行编辑。
  • 侧边栏顶部会有一段提示文字,说明三种取值方式与两种快捷语法。
  • 相关代码位置:
    • 前端frontend/src/flows/nodes/variable/form-meta.tsx
    • 后端backend/src/flow/executors/variable.rs

三、如何输入右值

  • 方式一:常量(默认)
    • 直接输入数字、字符串、对象、数组,例如:0"hello"{"a":1}[1,2,3]
    • 支持“快捷语法”,见下文。
  • 方式二引用ref
    • 切换右值类型为“引用”,通过路径选择器选择 ctx 中已有字段或其他节点输出。
    • 推荐用于团队协作时提升可读性。
  • 方式三表达式expression
    • 切换右值类型为“表达式”,输入 Rhai 表达式,运行时计算。
    • 适合需要计算或条件逻辑的场景。

四、快捷语法(在“常量”输入框中也可直输)

  • 表达式直输(运行时按 Rhai 表达式执行)
    • 触发规则:字符串以 ctx.ctx[ 开头。
    • 示例:
      • ctx["user_n"]
      • ctx.user.profile.name
      • (ctx["score"] ?? 0) + 1
  • 引用直输(运行时按引用路径取值)
    • 触发规则:字符串以 ${ 开始且以 } 结束。
    • 示例:
      • ${user_n}(引用顶层 ctx.user_n
      • ${nodes.order_node.result.id}(引用某节点的输出字段)
      • ${orders[0].id}(支持数组下标)

五、路径与表达式说明

  • ctx 注入
    • 表达式求值时,会自动注入 ctx(流程上下文),可通过点号或中括号访问。
    • 支持典型的运算与空值处理(如 ??)、算术、比较等。
  • 引用路径(${...}
    • 推荐使用规范路径:顶层字段如 ${a.b},节点输出如 ${nodes.node_id.some_field}
    • 支持数组访问:${arr[0].name}
    • 仅在完整匹配以 ${ 开始并以 } 结束时触发引用直输。
  • 节点输出引用建议
    • 使用 ${nodes.<nodeId>.<字段>} 的规范形式。
    • 避免模糊/非规范路径,便于协作和排障。

六、歧义与转义

  • 如需输入“字面量字符串”而非触发快捷语法:
    • 对于以 ctx.ctx[ 开头的文本:在前面加引号或任意非 c 字符,例如 'ctx[1]' 或前面加一个空格。
    • 对于包含 ${...} 的文本:只要整串文本不同时满足“以 ${ 开头且以 } 结束”,就不会触发引用直输;或者在外层再包一层引号,如 "abc ${x} def"
  • 简单记忆:只有“整串文本”完全匹配触发条件,才会被识别为快捷语法;否则按原样作为字符串。

七、常见示例

  • 从上下文读取用户名:
    • 左值:user_name;右值(常量输入框直输):ctx["user_n"]
  • 从节点输出读取订单 ID
    • 左值:first_order_id;右值(常量输入框直输):${nodes.order_node.result.orders[0].id}
  • 进行加一计算:
    • 左值:score_plus_one;右值(常量输入框直输):(ctx["score"] ?? 0) + 1
  • 传统方式(非快捷语法):
    • 切换到“引用”类型,选择路径 a.b
    • 切换到“表达式”类型,输入 (ctx["a"] ?? 0) + 1

八、最佳实践

  • 简单取值:优先用“引用”类型或 ${...} 快捷语法。
  • 复杂逻辑:使用“表达式”类型,便于维护与问题定位。
  • 协作/导出可读性:更倾向使用“引用/表达式”类型(而非快捷语法),或在保存时做规范化(如后续启用)。

九、导出/保存行为

  • 本次为“运行时增强”:
    • 在“常量”输入框中写的 ctx[...]${...},保存/导出时仍表现为普通字符串。
    • 运行时自动识别并解析执行。
  • 如需“保存即规范化”(将快捷语法转换为标准的 ref/expression 类型),可作为后续可选功能启用。

十、常见问题排查

  • 变量值为空或错误:
    • 检查 ctx 中是否存在对应字段(例如 ctx.user_n 是否在上游节点或初始上下文中设定)。
    • 检查节点 ID 与输出字段拼写(如 nodes.<nodeId>)。
    • 表达式报错多为语法或空值访问,建议在“表达式”类型中尝试以便定位。
  • 表达式返回类型:
    • 应返回可序列化 JSON 值(字符串、数值、布尔、对象、数组或 null)。
  • 查看结果:
    • 在变量节点右侧“输出”面板或下游节点输入位置查看结果。

十一、版本信息

  • 新增:在“常量”输入框中支持表达式/引用快捷直输。
  • 兼容:不影响既有流程配置与执行。