n8n的自定义脚本如何写?能实现哪些高级功能?
当“拖拽节点”不够用时,自定义脚本就是你的瑞士军刀
你是否也遇到过这种情况:n8n 的图形化工作流明明配置好了,数据却总在某个环节“卡壳”,比如从 Webhook 接收到的 JSON 数据结构太复杂,后续节点死活读不到嵌套字段?或者你需要对数据做点“数学题”——比如计算用户生命周期价值、动态生成折扣码——但标准节点压根不支持?这时候,抱怨没用,该上“自定义脚本”了。
别被“脚本”二字吓到。在 n8n 里写脚本,不是让你重写操作系统,而是像给乐高积木装个小马达——让静态流程动起来、聪明起来。
为什么需要自定义脚本?因为现实业务从不“标准化”
我在帮某跨境电商客户搭建“自动客服+订单催付”系统时,就撞上了墙。他们的 CRM 返回的客户数据是三层嵌套 JSON,而 Slack 节点只认扁平键值对。标准“Set”节点搞不定,硬编码路径又容易崩。最后,一个 15 行的 JavaScript 脚本,直接把深层数据“拍扁”重组,问题迎刃而解。
简单说,自定义脚本能帮你突破三大限制:
- 数据变形术:把乱糟糟的 API 响应,变成下游节点喜欢的样子(比如数组转对象、时间戳转人类可读格式)。
- 逻辑决策器:根据条件动态跳转流程分支(比如:订单金额>500元才发 VIP 优惠券)。
- 外部能力桥接:调用 Node.js 内置模块或第三方库(如加密、图像处理、AI 推理),这是纯图形节点做不到的。
手把手:5 分钟写出你的第一个 n8n 脚本
我们以“处理 Webhook 复杂 JSON”为例。假设你收到的数据长这样:
{
"user": {
"profile": {
"name": "张三",
"vip_level": 3
},
"orders": [
{"amount": 299, "currency": "CNY"}
]
}
}你想提取用户名、VIP 等级和首单金额,传给下一个 Telegram 节点。操作步骤:
- 在工作流中添加
Function节点(不是 Function Item!)。 - 粘贴以下代码:
// Dr.n8n 注释:items 是输入数据数组,每个 item 对应一条记录
const newItems = [];
for (const item of items) {
// 安全访问嵌套属性,避免报错
const name = item.json?.user?.profile?.name || '匿名用户';
const vipLevel = item.json?.user?.profile?.vip_level || 0;
const firstOrderAmount = item.json?.user?.orders?.[0]?.amount || 0;
// 构造新数据结构
newItems.push({
json: {
customer_name: name,
vip_tier: vipLevel,
first_order_value: firstOrderAmount,
// 动态生成消息文本
telegram_message: `尊敬的${name}(VIP${vipLevel}),您的首单金额为¥${firstOrderAmount}`
}
});
}
// 必须返回数组!否则下游节点收不到数据
return newItems;保存运行,你会发现输出变成了干净利落的扁平结构,Telegram 节点直接可用。就这么简单。
进阶玩法:让脚本干点“大事”
别小看这段 JS,它背后是完整的 Node.js 运行时。这意味着你能:
- 调用外部 API:用
axios或fetch请求天气、汇率、甚至 GPT-4(需自行处理鉴权)。 - 数据加密/签名:引入
crypto模块生成 HMAC 签名,满足金融级安全要求。 - 批量处理优化:用
Promise.all并行处理多个异步请求,比串行节点快 10 倍。 - 连接数据库:通过
pg或mysql2库直连 PostgreSQL/MySQL,实现复杂查询。
举个真实案例:我曾用脚本 + LangChain,在 n8n 里搭建了一个“合同条款比对 Agent”。脚本负责调用向量数据库检索相似条款,再用 OpenAI API 生成差异报告——整个过程无需离开 n8n 工作流。
避坑指南:老司机踩过的雷,你别再踩
| 错误写法 | 正确姿势 |
|---|---|
| 忘记 return 数组,直接 return item | 永远 return [newItem] 或 newItem 数组 |
| 硬编码访问深层属性(item.json.user.profile.name) | 用可选链(?.)和默认值(||)防崩溃 |
| 在循环里同步调用耗时 API | 用 async/await + Promise.all 提升性能 |
总结:脚本不是“备胎”,而是工作流的“大脑”
自定义脚本在 n8n 中绝非边缘功能——它是打通自动化“最后一公里”的核心武器。当你能熟练运用它,就能把零散的 API、数据库、AI 模型编织成真正的智能业务流。记住三个心法:安全访问数据、合理组织返回结构、善用异步能力。
现在轮到你了:你在哪个场景下最想用自定义脚本?是处理奇葩 JSON,还是想接入某个神秘 API?在评论区留下你的痛点,我会挑几个典型问题,手把手帮你写脚本!
-
n8n工作流节点报错怎么排查?新手快速调试技巧(附:日志分析法) 2026-01-08 23:46:10
-
n8n CVSS满分漏洞如何修复?紧急修复补丁与自查脚本(附:安全加固指南) 2026-01-08 23:45:42
-
QGIS怎么导入数据?基础操作难不难? 2025-12-23 18:00:41
-
ArcGIS叠加分析咋做?求交工具在哪里? 2025-12-23 17:00:41
-
GIS属性表怎么导出?格式转换如何操作? 2025-12-23 16:00:41
-
GIS零基础该怎么学?推荐教程有哪些? 2025-12-23 15:00:42
-
GIS全称具体是什么?包含哪些核心技术? 2025-12-23 14:00:41
-
MapShaper怎么简化边界?大文件如何办? 2025-12-23 13:00:41
-
常用植被指数有哪些?NDVI该怎么计算? 2025-12-23 12:00:41
-
ArcGIS导出属性表?TXT和Excel咋选? 2025-12-23 11:00:41
-
空间分析包含哪些?缓冲区分析怎么做? 2025-12-23 10:00:41
-
ArcMap基础教程有吗?工具箱怎么使用? 2025-12-23 09:00:41
-
谷歌地球打不开咋办?高清影像怎么看? 2025-12-23 08:00:41
-
CloudCompare怎么汉化?语言包去哪下? 2025-12-23 07:00:41
-
等高线转三维模型?GIS软件怎么实现? 2025-12-23 06:00:41
-
GIS开发就业前景咋样?需要学什么语言? 2025-12-23 05:00:41
-
QGIS下载安装难吗?详细步骤流程是? 2025-12-23 04:00:41
-
空间插值该选哪种?IDW与克里金区别? 2025-12-23 03:00:41
-
QGIS软件好不好用?与ArcGIS对比如何? 2025-12-23 02:00:41
-
QGIS界面变英文了?中文设置在哪里? 2025-12-23 01:00:41