refactor(backend): 重构 script_js 执行器实现 JavaScript 文件/内联脚本执行 feat(backend): 变量节点支持表达式/引用快捷语法输入 docs: 添加变量节点使用文档说明快捷语法功能 style(frontend): 调整测试面板样式和布局 fix(frontend): 修复测试面板打开时自动关闭节点编辑侧栏 build(backend): 添加 rquickjs 依赖用于 JavaScript 执行
5.2 KiB
5.2 KiB
变量赋值节点:表达式/引用直输 使用文档
一、功能概述
- 变量节点的右值支持三种取值方式:
- 常量(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)。
- 应返回可序列化 JSON 值(字符串、数值、布尔、对象、数组或
- 查看结果:
- 在变量节点右侧“输出”面板或下游节点输入位置查看结果。
十一、版本信息
- 新增:在“常量”输入框中支持表达式/引用快捷直输。
- 兼容:不影响既有流程配置与执行。