低代码的“天花板”,往往是一行 JavaScript 代码
大家好,我是 N8N大学 的主编。经常有刚入门的朋友问我:“主编,n8n 这么好用,是不是以后就不用写代码了?”
这是一个美丽的误会。低代码(Low-Code)的真正含义,不是彻底消灭代码,而是把写代码这件事,变成了一个“按需取用”的选项。
在 n8n 的世界里,当你遇到以下场景时,无代码(No-Code)流就会显得力不从心:
- API 返回的 JSON 结构太深,标准节点无法提取;
- 需要对一组数据进行复杂的数学计算或字符串拼接;
- 需要在流程中动态生成符合特定格式的签名或加密参数。
这时候,我们的“杀手锏”—— Code 节点 就该登场了。今天,笔者就带大家硬核拆解,如何用几行 JavaScript,打通自动化的“任督二脉”。
Code 节点究竟是什么?
你可以把 Code 节点 想象成 n8n 流程中的一个“黑盒子加工厂”。
当数据流经它时,你可以通过编写 JavaScript (Node.js) 代码,对数据进行任意维度的重塑。它不像 HTTP 节点那样只能请求数据,也不像 Set 节点那样只能设置字段,它是完全可编程的。
笔者注: n8n 的 Code 节点运行在安全的沙箱环境中,它支持绝大多数 Node.js 标准库,但出于安全考虑,某些系统级操作是受限的。
实战演练:从“乱码”到“规整”的数据清洗
假设我们正在做一个电商监控场景。API 返回了一堆关于商品的数据,其中价格字段是字符串带了货币符号(例如 "$1,299"),我们需要把它清洗成纯数字(1299),并加上税费计算。
1. 准备输入数据
在 Code 节点的上一级,我们模拟以下 JSON 数据结构:
{ "product": "MacBook Pro", "price_raw": "$1,299", "quantity": 2 }
2. 编写核心逻辑
将数据接入 Code 节点。点击节点,在代码编辑器中输入以下逻辑(N8N大学 建议初学者直接复制这段去理解):
// n8n 默认将上流数据存放在 items 数组中
// 我们遍历每一项(虽然这里只有一条)
for (const item of items) {
// 1. 获取原始价格字符串
const rawPrice = item.json.price_raw;
// 2. 清洗数据:去掉 "$" 和 ","
// 使用正则 replace(/D/g, '') 可以快速提取数字
const cleanPrice = parseFloat(rawPrice.replace(/D/g, ''));
// 3. 处理业务逻辑:计算含税总价 (假设税率 10%)
const quantity = item.json.quantity;
const totalCost = (cleanPrice * quantity) * 1.1;
// 4. 赋值给新字段
item.json.total_price = totalCost.toFixed(2); // 保留两位小数
item.json.price_clean = cleanPrice;
// 5. 必须返回修改后的 items
return items;
}
3. 验证输出
运行该节点后,你会看到输出变成了类似这样的结构:
{ "product": "MacBook Pro", ..., "price_clean": 1299, "total_price": "2857.80" }
你看,原本需要 3-4 个节点(Split out, Set, Math)才能完成的复杂逻辑,现在被浓缩在了一个 Code 节点中。
高阶技巧:处理复杂嵌套 JSON
Code 节点最常用的另一个场景,是“拍平”数据。
很多老旧系统的 API 返回的数据像俄罗斯套娃,比如:
{
"user": {
"id": 1,
"profile": {
"name": "UserA",
"contacts": ["email", "phone"]
}
}
}
如果你只想提取 email,标准的 Set 节点路径写起来很长且容易出错。而在 Code 节点里,你可以直接用 JS 语法:
const newItems = [];
for (const item of items) {
const user = item.json.user;
const email = user.profile.contacts[0]; // 假设 email 是第一个
// 构建一个全新的、扁平的对象
newItems.push({
json: {
user_id: user.id,
contact_info: email
}
});
}
return newItems;
注意这里返回的写法 json: { ... }。这是 n8n Code 节点的标准输出格式,一定要记牢。
避坑指南:新手最容易踩的两个坑
笔者见过太多新手在 Code 节点卡住,通常是因为以下两个细节:
坑点一:忘记 Return
Code 节点不会自动推断你的逻辑结束。如果你在函数里做了计算,但没有 return items;(或者返回空),那么后续节点将收不到任何数据,整个流程会显示成功,但就是没结果。
坑点二:数据类型错误
有时候你需要输出的字段是布尔值(true/false)或者数字,但 n8n 内部传输的是对象。务必确保你操作的是 item.json 下的属性。如果你直接修改 item 本身而不涉及 json 属性,可能会导致数据结构损坏。
Code 节点的 3 个最佳实践
为了让你的自动化流程既强大又稳定,N8N大学 给出以下建议:
- 保持纯粹: 尽量只在 Code 节点做数据转换,不要在里面发起 HTTP 请求(请使用 HTTP Request 节点),这样方便调试和复用。
- 善用 Mapping 面板: 即使写代码,也可以点击输入框右侧的变量按钮,查看数据结构,防止写错字段名。
- 异常处理: 如果计算可能报错(例如除以零),使用
try...catch包裹代码,防止整个 Workflow 报错。
常见问题 (FAQ)
Q1: Code 节点运行速度慢怎么办?
A: 如果数据量非常大(例如几千条),JS 循环确实会比原生节点慢。建议先用 Filter 节点过滤掉无关数据,再进入 Code 节点处理。
Q2: 我不会写 JS,还能用 n8n 吗?
A: 绝对可以!n8n 的 90% 功能都不需要写代码。Code 节点只是给进阶用户的一个“逃生通道”,当你需要它时,网上有大量现成的代码片段可以参考。
Q3: Code 节点可以引入第三方库吗?
A: 目前 n8n 云端版本不支持自行安装 npm 包。但你可以使用 Node.js 自带的库(如 crypto, moment 等)。如果是自托管版本,可以通过 Dockerfile 挂载外部库。
总结与资源
低代码不是无代码,它允许我们在必要的时候“低”下头去写代码,从而换取自动化的“高”度。掌握 Code 节点,意味着你掌握了 n8n 的灵魂。
从今天开始,试着用 JavaScript 去替代那些繁琐的节点串联吧。如果你在实操中遇到报错,欢迎随时来 N8N大学 的社区交流,笔者会亲自为你解答。
去试试吧,代码并不可怕,它只是你手中最锋利的工具。