跳到主要内容

代码规范#

在构建节点时遵循既定的代码规范,可使代码更具可读性和可维护性,并有助于避免错误。本文档为节点构建提供了良好的代码实践指导,主要聚焦于代码细节。关于界面标准和用户体验指南,请参阅节点界面设计

使用代码检查工具#

n8n节点代码检查工具可自动校验多项节点构建规范。在发布节点前,应确保代码通过该检查工具的检测。更多信息请参阅n8n节点代码检查工具文档。

使用入门模板#

n8n节点入门项目包含推荐配置、依赖项(含代码检查工具)及示例代码,可帮助您快速上手。请基于该入门模板启动新项目。

采用TypeScript编写#

所有n8n代码均使用TypeScript。使用TypeScript开发节点能提升开发效率并减少程序错误。

节点编写详细指南#

以下指南适用于所有节点开发。

资源与操作#

若节点支持多项操作,应将设置操作的参数命名为Operation。若节点可对多个资源执行这些操作,需创建Resource参数。以下代码示例展示了基础的资源与操作配置:

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能保留用户已输入的数据。

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

重用内部名称时,必须确保同一时间仅有一个字段对用户可见。您可通过displayOptions控制此行为。

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

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

禁止修改输入数据#

绝对不要修改节点接收的输入数据(可通过this.getInputData()访问的数据),因为所有节点共享这些数据。如需添加、修改或删除数据,请克隆输入数据后返回新数据。若不遵循此规则,在当前节点之后执行的同级节点将基于被篡改的数据运行,导致处理错误数据。

无需始终克隆所有数据。例如,若节点仅修改二进制数据而不变更JSON数据,可创建重用JSON项引用的新数据项。

使用内置请求库#

部分第三方服务在npm上提供专属库以简化集成,但此类包会引入额外依赖(包括依赖包的依赖链)。这将持续增加代码量,导致加载负担加重,并可能引发安全漏洞和程序缺陷等问题。请改用内置模块:

// 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

有关更多信息以及已移除的 this.helpers.request 的迁移说明,请参阅 HTTP 助手