1. n8n代码节点深度解析
n8n作为一款开源的工作流自动化工具,其代码节点(Code node)是最强大且灵活的组件之一。这个节点允许你在工作流中直接执行自定义JavaScript或Python代码,为自动化流程提供了无限的可能性。我使用n8n已有两年多时间,代码节点几乎出现在我90%的工作流中,它完美填补了标准节点功能与复杂业务逻辑之间的空白。
代码节点在0.198.0版本中取代了原有的Function和Function Item节点,提供了更统一和强大的编程接口。根据我的经验,它的主要价值在于:
- 处理标准节点无法完成的复杂数据转换
- 实现自定义业务逻辑
- 连接不直接支持的API和服务
- 调试和测试工作流中的数据流
提示:虽然代码节点功能强大,但建议优先使用标准节点完成基础操作,只在必要时才使用代码节点。这样可以提高工作流的可维护性和性能。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 代码节点核心功能详解
2.1 运行模式选择
代码节点提供两种执行模式,这对理解其工作方式至关重要:
-
Run Once for All Items(默认模式):
- 无论输入有多少数据项,代码只执行一次
- 适合批量处理或聚合操作
- 接收所有输入项作为数组(
$input.all()) - 必须返回一个数组作为输出
-
Run Once for Each Item:
- 为每个输入项单独执行代码
- 适合需要对每个数据项进行独立处理的场景
- 接收当前项作为对象(
$input.item) - 应返回单个对象(会自动包装成数组)
在我的实践中,约70%的情况下使用"Each Item"模式,因为它更符合大多数数据处理场景的需求。但当你需要跨项计算(如汇总、排序)时,"All Items"模式就变得必不可少。
2.2 JavaScript支持
n8n的代码节点基于Node.js环境,支持现代JavaScript特性:
javascript复制// 示例:处理电商订单数据
const orders = $input.all();
const processed = orders.map(order => {
// 使用内置方法访问JSON数据
const items = $node["Shopify"].json["line_items"];
// 计算总价
const total = items.reduce((sum, item) => sum + item.price * item.quantity, 0);
// 添加自定义字段
return {
...order.json,
metadata: {
calculatedTotal: total,
discountEligible: total > 100
}
};
});
return processed;
关键特性包括:
- 完整的ES6+支持
- Promise/async-await支持
- 内置console.log调试(输出显示在执行面板)
- 访问npm模块(自托管情况下)
注意:在n8n Cloud中无法使用外部npm模块,但自托管版本可以通过配置启用。
