N8N中文教程
集成节点/Creating_nodes/Build_your_node/Reference

代码标准#

遵循既定的代码标准来构建节点,可以使您的代码更具可读性和可维护性,并有助于避免错误。本文档为节点构建提供了良好的代码实践指导,主要关注代码细节。有关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

| ``` exportconstExampleNodeimplementsINodeType{ 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" 的资源节点。该资源包含多个操作,包括获取(Get)、编辑(Edit)和删除(Delete)。每个操作都需要使用订单 ID 来对指定订单执行操作。您需要为用户显示一个 ID 字段,该字段包含显示标签和内部名称。通过在各个资源的操作 ID 字段中使用相同的内部名称(通过 value 设置),用户在使用获取操作时输入的 ID 在切换到编辑操作时不会丢失。 重用内部名称时,必须确保每次只有一个字段对用户可见。您可以使用 displayOptions 来控制这一点。

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

本指南适用于使用编程式节点构建风格开发节点的情况,不适用于声明式风格。关于不同节点构建风格的更多信息,请参阅选择节点构建方法

不要修改输入数据#

绝对不要修改节点接收的输入数据(可通过 this.getInputData() 访问的数据),因为所有节点都共享这些数据。如果需要添加、修改或删除数据,请克隆输入数据并返回新数据。如果不这样做,在当前节点之后执行的同级节点将会基于被篡改的数据运行,从而处理错误的数据。 不需要总是克隆所有数据。例如,如果节点只修改二进制数据而不更改 JSON 数据,可以创建一个新条目来重用对 JSON 条目的引用。

使用内置请求库#

某些第三方服务在 npm 上提供了自己的库,这可以简化集成开发。但这些包的问题在于会引入额外依赖(以及依赖包的依赖)。这将导致代码量不断增加,需要加载更多代码,可能引入安全漏洞、程序错误等问题。建议改用内置模块:

1
2
3
4
5
6
7
8
9

| ``` // 如果无需认证 constresponse=awaitthis.helpers.httpRequest(options);

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


---|---
该方法使用 npm 包 [Axios](https://www.npmjs.com/package/axios)。
更多信息请参阅 [HTTP 辅助工具](https://docs.n8n.io/integrations/creating-nodes/build/reference/http-helpers/),
以及已移除的 `this.helpers.request` 的迁移指南。