Skip to content

5. 计算已预订订单#

在本工作流步骤中,您将学习 n8n 如何结构化数据,以及如何使用 Code 节点添加自定义 JavaScript 代码来执行计算。完成此步骤后,您的工作流应如下图所示:

Nathan 工作流的下一个步骤是从已预订订单中计算两个值:

  • 已预订订单的总数量
  • 所有已预订订单的总金额

要计算数据并为工作流添加更多功能,您可以使用 Code 节点,它允许您编写自定义 JavaScript 代码。

关于代码节点#

代码节点模式

代码节点有两种操作模式,取决于您希望如何处理项目:

  • 对所有项目运行一次 允许您编写代码一次性处理所有输入项目,作为一个组。
  • 对每个项目运行一次 为每个输入项目单独执行一次您的代码。

了解更多关于如何使用代码节点的信息。

在n8n中,节点之间传递的数据是具有以下JSON结构的对象数组:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
[
    {
   	 "json": { // (1)!
   		 "apple": "beets",
   		 "carrot": {
   			 "dill": 1
   		 }
   	 },
   	 "binary": { // (2)!
   		 "apple-picture": { // (3)!
   			 "data": "....", // (4)!
   			 "mimeType": "image/png", // (5)!
   			 "fileExtension": "png", // (6)!
   			 "fileName": "example.png", // (7)!
   		 }
   	 }
    },
    ...
]
  1. (必填) n8n将实际数据存储在嵌套的json键中。此属性是必需的,但可以设置为从空对象(如{})到数组和深度嵌套数据的任何内容。如果缺少,代码节点会自动将数据包装在json对象和父数组([])中。
  2. (可选) 项目的二进制数据。n8n中的大多数项目不包含二进制数据。
  3. (必填) 二进制数据的任意键名。
  4. (必填) Base64编码的二进制数据。
  5. (可选) 如果可能应该设置。
  6. (可选) 如果可能应该设置。
  7. (可选) 如果可能应该设置。

您可以在n8n数据结构页面上了解更多关于预期格式的信息。

配置 Code 节点#

现在让我们看看如何使用 Code 节点完成 Nathan 的任务。

在你的工作流中,添加一个 Code 节点 连接到 If 节点false 分支。

打开 Code 节点窗口后,配置以下参数:

  • 模式:选择 Run Once for All Items(对所有项目运行一次)。
  • 语言:选择 JavaScript

    在代码节点中使用 Python

    虽然下面我们使用 JavaScript,但你也可以在 Code 节点中使用 Python。了解更多信息,请参考 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!(错误:必须始终返回项目数组!)

现在选择 执行步骤,你应该会看到以下结果:

Code节点输出
Code 节点输出

下一步是什么?#

Nathan 🙋:哇,Code 节点太强大了!这意味着如果我掌握一些基本的 JavaScript 技能,就能增强我的工作流功能。

你 👩‍🔧:没错!你可以从无代码进阶到低代码开发了!

Nathan 🙋:那么,我该如何将这些已预订订单的计算结果发送到团队的 Discord 频道呢?

你 👩‍🔧:n8n 有专门的节点可以实现这个功能。我将在下一步中进行设置。