Discourse 工作流

看起来是 Discourse Workflows 自己的 JavaScript 表达式系统,它在服务器端的沙箱环境中执行,而不是像 Liquid 或 Handlebars 那样的独立模板语言。

因此,例如:

={{ $json.topic.title.toLowerCase() }}

之所以有效,是因为 {{ ... }} 中的内容被作为 JavaScript 进行求值,而 toLowerCase() 是标准的 JavaScript 字符串方法。

其实现位于 plugins/discourse-workflows/lib/discourse_workflows/expression_resolver.rb 文件中;它暴露了工作流特定的全局变量,如 $json$input$itemIndex$trigger$execution$()

其语法和概念与 n8n 非常相似。实际上,Workflows 源代码的其他地方明确引用了 n8n:

下方 oneboxed 的提交添加了 merge-node 的组合行为,并包含一个描述为:

defaults clash handling to add_suffix (matches n8n position combine)(默认冲突处理为 add_suffix,与 n8n 的位置组合匹配)

的测试。

因此,有证据表明 Workflows 的部分功能刻意与 n8n 的行为保持一致,尽管我没能找到任何明确说明 表达式语言本身 是复制或基于 n8n 的内容。因此,我会将其描述为 Discourse Workflows 提供的沙箱化 JavaScript 表达式,并带有一些类似 n8n 的约定。

3 个赞