1. n8n代码节点深度解析:从入门到高阶应用
n8n作为一款开源工作流自动化工具,其代码节点(Code Node)是连接不同系统、处理复杂逻辑的瑞士军刀。这个节点允许开发者直接在流程中插入JavaScript或Python代码,实现传统节点无法完成的定制化操作。我首次接触这个功能是在处理电商订单数据转换时,传统节点无法满足字段映射的复杂规则,而代码节点只用20行JavaScript就解决了问题。
1.1 代码节点的核心价值
代码节点本质上是一个沙盒执行环境,它取代了旧版的Function和Function Item节点(0.198.0版本后)。与普通节点相比,它的独特优势在于:
- 灵活的数据处理:可以直接操作JSON数据结构,比如我从ERP系统获取的嵌套订单数据,需要提取三级嵌套的SKU信息时,用
$input.item.json.warehouse[0].skus就能直接访问 - 自定义逻辑实现:上周帮一个客户用Python实现了基于购买历史的折扣计算算法,这是标准折扣节点做不到的
- 外部库集成:自托管环境下可以引入npm模块,最近一个物流项目就用到了
moment-timezone处理国际时区转换
重要提示:生产环境中使用外部模块时,务必在n8n配置中显式启用
N8N_CODE_ENABLE_INTERNAL_MODULES环境变量,避免安全风险
1.2 运行模式选择策略
代码节点提供两种执行模式,选择不当会导致性能问题:
| 模式 | 适用场景 | 内存消耗 | 我的使用建议 |
|---|---|---|---|
| Run Once for All Items | 批量数据处理 (如数组排序/过滤) |
低 | 默认选择,90%场景适用 |
| Run Once for Each Item | 逐条复杂计算 (如调用外部API) |
高 | 需要流控时使用 |
实测案例:处理1000条CRM数据时,全量模式比逐条模式快3倍,但需要特别注意错误处理 - 单条数据异常会导致整个批次失败。我的解决方案是先用try-catch包裹核心逻辑,再配合错误节点收集异常记录。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. JavaScript代码节点实战指南
2.1 核心语法与内置方法
n8n的JavaScript环境基于Node.js,但有几个专有特性需要掌握:
javascript复制// 获取上游节点数据(等效于$input.all())
const inputData = $input.all();
// 修改数据项的标准写法
for (const item of inputData) {
item.json.newField = transformData(item.json.originalField);
// 添加二进制附件(如图片处理)
if (item.binary) {
item.binary.thumbnail = await createThumbnail(item.binary.original);
}
}
// 必须返回数组!常见新手错误
return inputData;
内置变量速查表:
| 变量 | 类型
