表达式与代码
在 Duaer 里写表达式
Duaer 表达式写在 {{ }} 里,用来在节点参数中读取当前项、前面的节点和变量。只做字段整理时,先用 Edit Fields(Set)节点把数据准备好。
Duaer 表达式写在哪里
在 Duaer 里,把参数从固定值改成 Expression,就可以写表达式。从 INPUT 把字段拖进来,或直接输入。表达式外面的字会原样留下,花括号里的部分换成算出来的值。
复杂的整理不要散落在很多节点的参数里。用 Edit Fields(Set)先算出新字段、改掉旧字段或删掉不要的字段,后面的节点只读整理后的数据。
读取当前项
$json 是当前这一项的字段。Webhook 把正文放在 body 里时,城市这样取:
{{ $json.body.city }}也可以写成 {{ $json["body"]["city"] }}。点号和方括号是同一条路径。
多行 JavaScript
表达式里要写多句时,用立即执行的函数把代码包起来,最后 return 你要的值。日期计算用的是 Luxon 的 DateTime。
{{(() => {
const end = DateTime.fromISO("2017-03-13");
const start = DateTime.fromISO("2017-02-13");
return end.diff(start, "months").toObject();
})()}}凭证字段里的表达式
Duaer 也可以在凭证字段里写表达式。它按这一次执行的数据来算,能读到前面节点已经交出的值,例如 Webhook 带来的令牌。不同执行各自计算,不会共用上一次的结果。
常见报错
- JSON Output 无效:你交出去的不是合法 JSON,或引用了这次输入里不存在的字段。
- 找不到表达式要的数据,或提示某个节点还没执行:先把那一步跑通。Code 节点里可以用 $("节点名").isExecuted 判断前面有没有跑过。
- 语法错误:多了一个点、少了一个括号。例如 {{ $("If").item.json. }} 末尾的点是无效的。
常见问题
Duaer 表达式的写法是什么?
Duaer 表达式写在双花括号里,例如 {{ $json.body.city }}。参数要先改成 Expression。花括号外的文字会保留,花括号里换成计算后的值。
Duaer 表达式找不到数据时先检查什么?
Duaer 表达式找不到数据,通常是前面的节点还没执行,或字段这次不存在。先把表达式点名的那个节点跑通。语法上不要留下多余的点,例如 {{ $("If").item.json. }} 是无效的。
同组
在 Duaer 里定义可复用的变量
Duaer 的变量把一份值存起来,给多条数字组织用。表达式和 Code 节点里写成 $vars.键名。变量一律是字符串,运行中只读。
表达式Duaer 表达式里的内置方法和变量
Duaer 在表达式里提供读取数据的变量和按类型调用的方法。Code 节点跑的是普通 JavaScript 和原生 Luxon,标成 Duaer 扩展的方法在那里可能不存在,或参数不一样。
表达式表达式里常用的快捷方法
Duaer 表达式用 $json 读当前项,用 $("节点名") 读前面的节点,用 $now 和 $if() 处理时间和条件。这些名字在参数的表达式模式里可用。
表达式HTTP 节点分页时能用的变量
Duaer 的 HTTP Request 节点在分页表达式里提供 $pageCount、$request 和 $response。这三个名字只在这个节点里有效,别的节点写了也读不到。
转换按数据类型使用转换方法
Duaer 表达式可以在值后面调用转换方法,例如 {{ $json.name.toTitleCase() }}。这些方法按数组、布尔、日期、数字、对象、字符串分开。Code 节点没有这套扩展。
转换数组上的转换方法
在 Duaer 表达式里,数组方法写在数组后面,例如 {{ $json.ids.unique() }}。average、max、min 遇到非数字会报错。
转换布尔值上的转换方法
在 Duaer 表达式里,布尔值可以判断空不空,也可以转成数字或字符串。true 转成数字是 1,false 是 0。
转换日期上的转换方法
在 Duaer 表达式里,$now 和 $today 是 Luxon 的 DateTime。字符串或数字要先 toDateTime(),再调用 format、plus、setZone 这些方法。
转换数字上的转换方法
在 Duaer 表达式里,数字方法做取整、奇偶判断,以及转成布尔、字符串或 DateTime。round 取最接近的数,ceil 向上,floor 向下。
转换对象上的转换方法
在 Duaer 表达式里,对象方法用来判断字段、删字段、合并,以及把对象编成查询字符串。keys() 和 values() 分别给出字段名和值。
转换字符串上的转换方法
在 Duaer 表达式里,字符串方法做大小写、截取、判断邮箱和网址,以及 base64 和 URL 编解码。调用写在字符串后面。
查询用 JMESPath 查询 JSON
Duaer 用 $jmespath(对象, "查询") 在 JSON 上做 JMESPath 查询。表达式和 JavaScript 的 Code 节点可以用。Python 的 Code 节点没有这个函数。
日期在表达式里用 Luxon 处理日期
Duaer 表达式里的日期是 Luxon 的 DateTime。$now 和 $today 直接就是 DateTime。Code 节点用的是原生 Luxon,format() 和 plus(数量, 单位) 不能照搬过去。
示例Duaer 表达式示例
这些示例都在 Duaer 的表达式模式里。它们读取当前项、补上默认值、格式化日期,并在字段很多时改用 Edit Fields(Set)。
示例方法和变量对照
这是 Duaer 表达式里最常用的名字。当前项用 $json,前面的节点用 $("节点名"),变量用 $vars,转换方法按数据类型分到各自的页面。