Skip to content

代码标准

构建节点时遵循既定的代码标准,可以提高代码的可读性和可维护性,并有助于避免错误。本文档提供了构建节点的良好代码实践指南,重点关注代码细节。有关 UI 标准和 UX 指南,请参阅Node UI 设计

使用 linter

n8n 节点 Linter 可自动检查许多节点构建标准。在发布节点之前,您应该确保它已通过 Linter 的检查。有关更多信息,请参阅n8n 节点 Linter文档。

使用启动器

n8n Node 入门项目包含推荐的设置、依赖项(包括 Linter)以及一些示例,可帮助您快速上手。立即使用入门项目开始您的新项目吧。

使用 TypeScript 编写

所有 n8n 代码均采用 TypeScript 编写。使用 TypeScript 编写节点可以加快开发速度并减少错误。

编写节点的详细指南

这些准则适用于您构建的任何节点。

资源和运营

如果您的节点可以执行多项操作,请调用设置该操作的参数。如果您的节点可以对多个资源执行这些操作,请创建一个参数。以下代码示例展示了基本的资源和操作设置:

 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',
                // Only show these operations for Resource One
                displayOptions: {
                    show: {
                        resource: [
                            'resourceOne'
                        ]
                    }
                },
                options: [
                    {
                        name: 'Create',
                        value: 'create',
                        description: 'Create an instance of Resource One'
                    }
                ]
            }
        ]
    }
}

重复使用内部参数名称

n8n 节点中的所有资源和操作字段都有两种设置:显示名称(使用参数设置)和内部名称(使用参数设置)。重复使用字段的内部名称可让 n8n 在用户切换操作时保留用户输入的数据。

例如:您正在构建一个包含名为“订单”的资源的节点。此资源包含多个操作,包括“获取”、“编辑”和“删除”。每个操作都使用订单 ID 对指定订单执行操作。您需要为用户显示一个 ID 字段。此字段包含一个显示标签和一个内部名称。通过在每个资源上为操作 ID 字段使用相同的内部名称(在 中设置),用户可以在选择“获取”操作时输入 ID,并且在切换到“编辑”操作时不会丢失该 ID。

重复使用内部名称时,必须确保每次只有一个字段对用户可见。您可以使用 来控制这一点。

编写程序化风格节点的详细指南

这些准则适用于使用编程式节点构建样式构建节点的情况。使用声明式节点构建样式时,这些准则不适用。如需详细了解不同的节点构建样式,请参阅选择节点构建方法

不要更改传入数据

切勿更改节点接收的传入数据(可通过 访问的数据),因为所有节点共享该数据。如果需要添加、更改或删除数据,请克隆传入数据并返回新数据。如果不这样做,当前节点之后执行的兄弟节点将对已更改的数据进行操作,并处理错误的数据。

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

使用内置请求库

一些第三方服务在 npm 上有自己的库,这使得集成更加容易。这些包的问题在于,你需要添加另一个依赖项(以及依赖项的所有依赖项)。这会增加越来越多的代码,这些代码必须加载,可能会引入安全漏洞、错误等等。因此,请使用内置模块:

1
2
3
4
5
6
7
8
9
// If no auth needed
const response = await this.helpers.httpRequest(options);

// If auth needed
const response = await this.helpers.httpRequestWithAuthentication.call(
	this, 
	'credentialTypeName', // For example: pipedriveApi
	options,
);

这使用了 npm 包Axios

有关详细信息,请参阅HTTP 帮助程序,以及有关已删除的迁移说明。