n8n代码节点教程:用JavaScript扩展你的自动化能力
n8n是一款功能强大的自动化工具,通过代码节点(Code node)功能,你可以使用JavaScript编写自定义逻辑,轻松扩展工作流的自动化能力。本文将为你详细介绍如何使用代码节点,让你的自动化工作流更加强大和灵活。
为什么选择代码节点?
代码节点是n8n中最强大的功能之一,它允许你:
- 处理复杂的数据转换和计算
- 实现自定义业务逻辑
- 集成外部API和服务
- 解决无法通过标准节点完成的特殊需求
对于需要处理复杂数据或实现特定功能的自动化场景,代码节点是理想的选择。
开始使用代码节点
基本界面介绍
在n8n工作流编辑器中,拖放"代码"节点到画布上,双击打开配置界面。你会看到两个主要选项卡:"代码"和"设置"。
n8n代码节点编辑界面,展示了JavaScript编辑区域和运行模式选择
选择运行模式
代码节点提供两种运行模式:
- 对所有项目运行一次:默认模式,无论输入多少项目,代码只执行一次
- 对每个项目运行一次:代码将为每个输入项目单独执行一次
根据你的需求选择合适的模式。处理批量数据转换时通常使用"对每个项目运行一次"模式。
JavaScript基础语法
n8n代码节点支持标准JavaScript语法,你可以使用:
- 变量声明:
let,const - 函数定义:
function, 箭头函数() => {} - 循环结构:
for,forEach,map - 条件判断:
if/else,switch - 数组和对象操作
访问输入数据
在代码节点中,输入数据通过$input对象访问:
// 获取所有输入项目
const items = $input.all();
// 处理每个项目
items.forEach(item => {
// 访问项目数据
const data = item.json;
// 处理数据...
});
返回输出数据
处理完成后,使用return语句返回结果:
// 返回单个项目
return [{
json: {
result: "处理完成",
value: 42
}
}];
// 或返回多个项目
return [
{ json: { id: 1, name: "项目1" } },
{ json: { id: 2, name: "项目2" } }
];
实用示例
示例1:数据转换
将输入的日期字符串转换为ISO格式:
// 对每个项目运行一次模式
const date = new Date(item.json.dateString);
return {
json: {
originalDate: item.json.dateString,
isoDate: date.toISOString(),
year: date.getFullYear()
}
};
示例2:数据过滤
筛选出价格大于100的产品:
// 对所有项目运行一次模式
const expensiveProducts = $input.all().filter(item => {
return item.json.price > 100;
});
return expensiveProducts.map(product => ({
json: {
name: product.json.name,
price: product.json.price,
category: product.json.category
}
}));
使用内置方法和变量
n8n提供了多种内置方法和变量,简化常见操作:
$input.all(): 获取所有输入项目$item(index): 获取指定索引的项目$json["property"]: 访问当前项目的属性$env.VARIABLE_NAME: 访问环境变量$now: 获取当前日期时间
在代码编辑器中输入$即可看到所有可用的内置方法和变量提示。
调试技巧
代码节点提供了多种调试方式:
- 使用
console.log()输出调试信息,日志会显示在执行结果面板 - 使用
$debug()方法在工作流执行时查看变量值 - 利用表达式编辑器测试数据路径和表达式
代码节点执行日志示例,显示console.log输出和执行结果
高级功能
异步操作
代码节点支持异步JavaScript操作:
// 异步获取数据
async function fetchData(url) {
const response = await fetch(url);
return response.json();
}
// 使用异步函数
const data = await fetchData('https://api.example.com/data');
return [{ json: data }];
使用外部库
自托管n8n用户可以配置允许使用外部npm模块:
- 设置环境变量
NODE_FUNCTION_ALLOW_BUILTIN和NODE_FUNCTION_ALLOW_EXTERNAL - 在代码中导入所需模块:
const moment = require('moment');
const formattedDate = moment().format('YYYY-MM-DD');
return [{ json: { date: formattedDate } }];
常见问题解决
数据链接问题
当输入和输出项目数量不匹配时,需要手动处理项目链接:
// 保留项目链接
const newItems = items.map(item => ({
json: { processed: true },
pairedItem: { item: item.$node["node-name"].$id }
}));
return newItems;
性能优化
- 避免在循环中执行繁重操作
- 对大量数据使用批量处理
- 利用
$input.all()减少重复访问输入数据
总结
代码节点是n8n中最强大的功能之一,它为你的自动化工作流提供了无限可能。通过JavaScript编写自定义逻辑,你可以处理复杂的数据转换、实现特殊业务规则,并与各种API和服务集成。
无论是简单的数据处理还是复杂的业务逻辑,代码节点都能帮助你构建更强大、更灵活的自动化工作流。开始探索代码节点的潜力,提升你的n8n自动化技能吧!
要了解更多关于代码节点的高级用法,请参考官方文档:docs/code/code-node.md 和 docs/code/builtin/overview.md。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



