5. 计算已预订订单#
在工作流的这一步中,你将学习 n8n 如何组织数据,以及如何使用 Code 节点(Code node) 添加自定义 JavaScript 代码来执行计算。完成此步骤后,你的工作流应如下所示: 查看工作流文件 Nathan 工作流的下一步是根据已预订订单计算两个值:
- 预订订单的总数量
- 所有订单的总金额
为了进行数据计算并为工作流添加更多功能,你可以使用 Code 节点,它允许你编写自定义的 JavaScript 代码。
关于 Code 节点#
Code 节点的模式 Code 节点有两种操作模式(modes),具体取决于你希望如何处理项目:
- 对所有项目运行一次(Run Once for All Items):允许你编写一次性处理所有输入项目的代码,即将它们作为一个整体进行处理。
- 对每个项目各运行一次(Run Once for Each Item):针对每个输入项目分别执行一次你的代码。
了解更多关于如何使用 Code 节点 的信息。 在 n8n 中,节点之间传递的数据是一个对象数组,其 JSON 结构如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19| ``` [ { "json":{(必需) n8n 将实际数据存储在一个嵌套的 json 键中。该属性是必需的,但可以设置为空对象(如 {}),也可以是数组或深度嵌套的数据。如果缺少,Code 节点会自动将数据包裹在 json 对象和父级数组([])中。 "apple":"beets", "carrot":{ "dill":1 } }, "binary":{(可选) 项目的二进制数据。大多数 n8n 项目不包含二进制数据。 "apple-picture":{(必需) 二进制数据的任意键名。 "data":"....",(必需) Base64 编码的二进制数据。 "mimeType":"image/png",(可选) 如果可能,应设置此项。 "fileExtension":"png",(可选) 如果可能,应设置此项。 "fileName":"example.png",(可选) 如果可能,应设置此项。 } } }, ... ]
---|---
你可以在 n8n 数据结构 页面了解有关预期格式的更多信息。
## 配置 Code 节点#
现在让我们看看如何使用 **Code 节点** 来完成 Nathan 的任务。
在你的工作流中,添加一个 **Code 节点**,并将其连接到 **If 节点** 的 `false` 分支。
打开 Code 节点窗口后,配置以下参数:
* **模式(Mode)**:选择 **对所有项目运行一次(Run Once for All Items)**。
* **语言(Language)**:选择 **JavaScript**。
在 Code 节点中使用 Python
尽管我们在下方使用的是 JavaScript,但你也可以在 Code 节点中使用 Python。欲了解更多信息,请参考 Code 节点 文档。
* 将以下代码复制并粘贴到 **Code** 框中,替换原有代码:1 2 3 4 5 6 7 8 9
| ```
let items = $input.all();
let totalBooked = items.length;
let bookedSum = 0;
for (let i = 0; i < items.length; i++) {
bookedSum = bookedSum + items[i].json.orderPrice;
}
return [{ json: { totalBooked, bookedSum }}];---|---
请注意我们返回计算结果的格式:
1| ``` return [{ json: { totalBooked, bookedSum }}]
---|---
数据结构错误
如果你没有使用正确的数据结构,将会收到错误提示:`Error: Always an Array of items has to be returned!`(必须返回一个项目数组!)
现在点击 **执行步骤(Execute step)**,你应该会看到如下结果:
[Code 节点输出](https://docs.n8n.io/_images/courses/level-one/chapter-five/l1-c5-5-5-code-node.png)_Code 节点输出_
## 下一步是什么?#
**Nathan 🙋**:哇,Code 节点真强大!这意味着只要我掌握一些基础的 JavaScript 技能,就能大幅提升我的工作流能力。
**你 👩🔧**:没错!你可以从无代码迈向低代码了!
**Nathan 🙋**:那我现在该怎么把已预订订单的计算结果发送到我们团队的 Discord 频道呢?
**你 👩🔧**:n8n 有专门的节点可以实现这个功能。我将在下一步中为你设置它。