Skip to content

代码标准#

在构建节点时遵循定义的代码标准使您的代码更具可读性和可维护性,并有助于避免错误。本文档提供节点构建的良好代码实践指导。它专注于代码细节。有关 UI 标准和 UX 指导,请参考节点 UI 设计

使用检查器#

n8n 节点检查器为许多节点构建标准提供自动检查。您应该确保您的节点在发布之前通过检查器的检查。参考 n8n 节点检查器文档了解更多信息。

使用启动器#

n8n 节点启动器项目包括推荐的设置、依赖项(包括检查器)和示例,以帮助您开始。使用启动器开始新项目。

用 TypeScript 编写#

所有 n8n 代码都是 TypeScript。用 TypeScript 编写您的节点可以加快开发速度并减少错误。

编写节点的详细指南#

这些指南适用于您构建的任何节点。

资源和操作#

如果您的节点可以执行多个操作,请将设置操作的参数称为 Operation。如果您的节点可以对多个资源执行这些操作,请创建一个 Resource 参数。以下代码示例显示了基本的资源和操作设置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
export const ExampleNode implements INodeType {
    description: {
        displayName: 'Example Node',
        ...
        properties: [
            {
                displayName: 'Resource',
                name: 'resource',
                type: 'options',
                options: [
                    {
                        name: 'Resource One',
                        value: 'resourceOne'
                    },
                    {
                        name: 'Resource Two',
                        value: 'resourceTwo'
                    }
                ],
                default: 'resourceOne'
            },
            {
                displayName: 'Operation',
                name: 'operation',
                type: 'options',
                // 仅为资源一显示这些操作
                displayOptions: {
                    show: {
                        resource: [
                            'resourceOne'
                        ]
                    }
                },
                options: [
                    {
                        name: 'Create',
                        value: 'create',
                        description: 'Create an instance of Resource One'
                    }
                ]
            }
        ]
    }
}

重用内部参数名称#

n8n 节点中的所有资源和操作字段都有两个设置:使用 name 参数设置的显示名称,以及使用 value 参数设置的内部名称。重用字段的内部名称允许 n8n 在用户切换操作时保留用户输入的数据。

例如:您正在构建一个名为 'Order' 的资源节点。此资源有几个操作,包括 Get、Edit 和 Delete。每个操作都使用订单 ID 对指定订单执行操作。您需要为用户显示一个 ID 字段。此字段有一个显示标签和一个内部名称。通过对每个资源上的操作 ID 字段使用相同的内部名称(在 value 中设置),用户可以在选择 Get 操作时输入 ID,如果切换到 Edit 也不会丢失它。

重用内部名称时,您必须确保用户一次只能看到一个字段。您可以使用 displayOptions 控制这一点。

编写编程式节点的详细指南#

这些指南适用于使用编程式节点构建样式构建节点时。它们与使用声明式样式时无关。有关不同节点构建样式的更多信息,请参考选择您的节点构建方法

不要更改传入数据#

永远不要更改节点接收的传入数据(可通过 this.getInputData() 访问的数据),因为所有节点都共享它。如果您需要添加、更改或删除数据,请克隆传入数据并返回新数据。如果您不这样做,在当前节点之后执行的兄弟节点将对更改的数据进行操作并处理不正确的数据。

并不总是需要克隆所有数据。例如,如果节点更改二进制数据但不更改 JSON 数据,您可以创建一个重用对 JSON 项目引用的新项目。

使用内置请求库#

一些第三方服务在 npm 上有自己的库,这使得创建集成变得更容易。这些包的问题是您添加了另一个依赖项(加上依赖项的所有依赖项)。这添加了越来越多必须加载的代码,可能引入安全漏洞、错误等。相反,请使用内置模块:

1
2
3
4
5
6
7
8
9
// 如果不需要身份验证
const response = await this.helpers.httpRequest(options);

// 如果需要身份验证
const response = await this.helpers.httpRequestWithAuthentication.call(
	this, 
	'credentialTypeName', // 例如:pipedriveApi
	options,
);

这使用 npm 包 Axios

参考 HTTP 助手了解更多信息,以及已删除的 this.helpers.request 的迁移说明。