低代码不是无代码:n8n Code 节点入门,用 JavaScript 处理复杂数据

2026-01-18 21 0

低代码的“天花板”,往往是一行 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大学 给出以下建议:

  1. 保持纯粹: 尽量只在 Code 节点做数据转换,不要在里面发起 HTTP 请求(请使用 HTTP Request 节点),这样方便调试和复用。
  2. 善用 Mapping 面板: 即使写代码,也可以点击输入框右侧的变量按钮,查看数据结构,防止写错字段名。
  3. 异常处理: 如果计算可能报错(例如除以零),使用 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大学 的社区交流,笔者会亲自为你解答。

去试试吧,代码并不可怕,它只是你手中最锋利的工具。

相关文章

寻找免费的 Zapier 替代品?深度解析 n8n 社区版为何是最佳选择
不只是 n8n!2025年值得关注的 5 款开源自动化工具推荐与评测
省钱攻略:如何将 Zapier 自动化工作流无缝迁移到 n8n?
防止数据丢失:n8n 工作流与凭证(Credentials)的自动备份方案
Node.js 开发者首选:使用 npm 全局安装 n8n 及 PM2 进程守护教程
本地部署痛点解决:配合 Cloudflare Tunnel 实现 n8n 外网远程访问

发布评论