跳至内容

代码标准#

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

使用代码检查工具#

n8n节点检查器提供了对许多节点构建标准的自动检查功能。在发布节点之前,您应确保它通过了检查器的所有检查。更多信息请参阅n8n节点检查器文档。

使用入门指南#

n8n节点入门项目包含推荐的设置、依赖项(包括代码检查工具)以及示例,帮助您快速上手。新项目请从starter开始。

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

重用内部参数名称#

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

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

当重复使用内部名称时,必须确保每次只向用户显示一个字段。您可以使用displayOptions来控制这一点。

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

这些指南适用于使用编程式节点构建风格时。如果采用声明式风格则不相关。有关不同节点构建风格的更多信息,请参阅选择您的节点构建方法

不要更改传入数据#

切勿更改节点接收的输入数据(可通过this.getInputData()访问),因为所有节点共享这些数据。如需添加、修改或删除数据,请克隆输入数据并返回新数据。若不这样做,在当前节点之后执行的同级节点将在被修改的数据上运行,从而处理错误数据。

并不总是需要克隆所有数据。例如,如果一个节点更改了二进制数据但未更改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 helpers,以及已移除的this.helpers.request的迁移指南。

优云智算