n8n Code节点编程:从基础逻辑到API集成的实战指南

2026-03-19 21 0

别再被“代码恐惧症”吓退了

很多刚接触 n8n 的朋友,看到 Code 节点 就下意识想绕道走。在他们眼里,这仿佛是低代码平台的“禁区”,必须得是程序员才能碰。但作为 N8N大学 的老主编,我得告诉你一个残酷的真相:不会用 Code 节点,你只用到了 n8n 30% 的功力。

想象一下这个场景:你需要把一堆乱七八糟的日期格式统一,或者需要把两个 API 返回的数据“缝合”在一起。用传统的节点,你得拖拽好几个节点,连线绕来绕去,最后逻辑还容易乱。但用 Code 节点,几行 JavaScript 代码就能瞬间搞定。今天这篇实战指南,笔者就带你拆解 Code 节点,从最基础的逻辑处理到硬核的 API 集成,让你彻底告别“低代码”只能处理简单流程的尴尬。

Code 节点到底是什么?

简单来说,Code 节点就是 n8n 工作流里的“瑞士军刀”。它允许你在流程的任何环节插入 JavaScript(Node.js)代码。它的核心任务只有两个:要么处理数据(Transform),要么生成数据(Generate)。

在 n8n 里,数据是以 JSON 格式流转的。每一个节点传递给下一个节点的,都是一个 JSON 对象数组。理解了这一点,你就掌握了 Code 节点的 50%。你不需要写复杂的后端服务,只需要学会如何“操纵”这个数组。

实战一:基础数据处理逻辑

我们先从最简单的场景入手。假设你从数据库导出了一份用户列表,但名字全是大写的(例如 "JOHN DOE"),你需要在发邮件前把它们转为首字母大写("John Doe")。

在传统的 n8n 流程中,你可能需要复杂的公式节点。但在 Code 节点里,这只需要一个简单的 map 操作。

步骤拆解与代码示例

  1. 在工作流中添加一个 Code 节点
  2. 连接上一个节点(例如 Google Sheets 读取数据)。
  3. 在代码编辑器中输入以下逻辑:
// n8n 默认会把上一步的数据注入到 items 数组中
// 我们需要遍历这个数组
for (const item of items) {
  // 假设我们要修改的数据在 json.name 字段中
  const originalName = item.json.name;
  
  // 执行简单的字符串处理逻辑
  if (originalName) {
    item.json.name = originalName.charAt(0).toUpperCase() + originalName.slice(1).toLowerCase();
  }
}

// 必须返回处理后的 items
return items;

点击运行后,你会发现输出的数据已经完成了清洗。这就是 Code 节点最基础的用法:遍历输入项,修改 json 对象属性,然后返回。

实战二:复杂的数据结构转换

Code 节点的威力在于它能处理任意复杂的 JSON 结构。比如,API 返回的数据结构是嵌套的,但你只想提取最内层的某个值,并重新组装成一个扁平的列表。

想象一个场景:你请求了天气 API,返回的数据里包含了 7 天的预报,但你只需要提取“日期”和“最高气温”这两个字段,生成一个简单的列表供后续节点使用。

代码实战:数据重塑

// 假设输入数据结构如下:
// [{ "json": { "forecast": [ { "date": "2023-10-01", "temp_max": 25 }, ... ] } }]
const result = [];

// 遍历每一个输入项
items.forEach(item => {
  const forecastList = item.json.forecast;
  
  // 确保 forecast 存在且是数组
  if (Array.isArray(forecastList)) {
    forecastList.forEach(forecast => {
      // 将嵌套数据打平,放入新的对象中
      result.push({
        json: {
          date: forecast.date,
          temperature: forecast.temp_max
        }
      });
    });
  }
});

return result;

这段代码展示了如何将嵌套的 API 响应“打平”。在 n8n 的 MergeSpreadsheet File 节点中,这种扁平化的数据结构是最容易被处理的。

实战三:Code 节点模拟 API 请求

这是 Code 节点的高阶用法。虽然 n8n 有专门的 HTTP Request 节点,但在某些特殊情况下,Code 节点直接请求 API 更高效。

什么情况?当你需要根据上一步的数据动态生成请求 URL,或者 API 的鉴权逻辑非常复杂(比如需要签名),HTTP 节点配置起来太麻烦时。n8n 的 Code 节点基于 Node.js,我们可以直接使用原生的 axios 库。

集成外部 API 实战

// n8n 内置了 axios,可以直接引入
const axios = require('axios');

// 假设我们要获取每个 item 对应的用户详情
const results = [];

for (const item of items) {
  const userId = item.json.userId;
  
  try {
    // 发起 GET 请求
    const response = await axios.get(`https://jsonplaceholder.typicode.com/users/${userId}`);
    
    // 将 API 返回的数据合并到当前 item 中
    item.json.userInfo = response.data;
    results.push(item);
  } catch (error) {
    // 错误处理:如果请求失败,保留原数据并记录错误
    item.json.error = error.message;
    results.push(item);
  }
}

return results;

注意: 在这个例子中,我们使用了 await,这意味着你的 Code 节点设置里必须勾选 "Execute Once"(执行一次) 还是 "For Each Item"(为每一项执行)。如果是为了并发请求,逻辑会稍有不同,但核心原理是一样的。

避坑指南:Code 节点常见报错

在 N8N大学 的社区里,关于 Code 节点的报错咨询从未停歇。以下是三个最常见的坑:

1. 忘记返回 items

很多新手写完逻辑后,直接运行,发现后续节点没有收到数据。原因很简单:Code 节点不会自动传递数据,你必须显式地 return items(或者你处理后的 `result` 数组)。如果什么都不返回,n8n 会认为该节点没有输出。

2. 异步处理不当

当你在 Code 节点中使用 axios 或其他异步操作时,如果使用了 async/await 但没有正确处理 Promise,或者在循环中发起大量请求导致内存溢出,节点可能会超时。建议在 n8n 的设置中适当调大 Code 节点的 Timeout 时间,或者使用 Split in Batches 节点控制并发量。

3. 数据类型错乱

n8n 的数据流转严格依赖 JSON。如果你在 Code 节点里返回了一个非 JSON 对象(比如直接返回一个 Date 对象或 Buffer),会导致整个流程崩溃。记住:始终返回纯 JSON 可序列化的对象。

FAQ 问答

Q1: 我完全不懂 JavaScript,能用好 Code 节点吗?

完全可以。Code 节点不需要你写出“健壮”的软件工程代码,只需要掌握最基础的数组操作(map, filter, find)和对象操作即可。N8N大学 建议你先从修改字段值开始,慢慢尝试。

Q2: Code 节点和 HTTP Request 节点有什么区别?

HTTP Request 节点专门用于发送网络请求,配置简单,支持各种鉴权方式。Code 节点更通用,既可以发请求(通过 axios),也可以做复杂的数据计算。建议优先使用 HTTP Request 节点处理网络请求,用 Code 节点处理返回后的数据。

Q3: Code 节点会拖慢工作流速度吗?

理论上,JavaScript 代码执行速度极快。但如果在 Code 节点中处理大量数据(例如几万条记录)或发起大量串行 API 请求,确实会成为瓶颈。此时建议将任务拆分,或使用 n8n 的分布式执行功能(企业版)。

总结与资源

Code 节点是 n8n 从“好用”进阶到“强大”的关键钥匙。它打破了预设节点的功能限制,让你能够处理任何数据结构的逻辑。不要畏惧代码,把它看作是处理数据的“胶水”即可。

如果你想深入学习更多实战案例,欢迎访问 N8N大学 (n8ndx.com),那里有更多关于 n8n 的硬核玩法和避坑指南。下次当你遇到一个复杂的逻辑需求时,不妨打开 Code 节点,敲下第一行 return items;

相关文章

n8n Code节点高级编程实践的学习路径推荐
把n8n Code节点玩出花:与Make、Zapier的实战对比
n8n Code节点高级编程:企业级自动化实战指南
n8n Code节点:如何构建一个高可用的定时任务调度器?
n8n Code节点高级编程:社区文档与实战避坑指南
n8n Code节点:从JSON解析到动态生成的实战心法

发布评论