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

96 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 变量赋值节点:表达式/引用直输 使用文档
## 一、功能概述
- 变量节点的右值支持三种取值方式:
- 常量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`)。
- 查看结果:
- 在变量节点右侧“输出”面板或下游节点输入位置查看结果。
## 十一、版本信息
- 新增:在“常量”输入框中支持表达式/引用快捷直输。
- 兼容:不影响既有流程配置与执行。