你是不是也被 n8n 节点报错搞崩溃了?
笔者在 N8N大学 混迹多年,看过太多小白被 n8n 的报错信息折磨得死去活来。明明流程逻辑没问题,跑起来却满屏飘红,那种挫败感我太懂了。
今天,我们不谈虚的,直接上干货。作为 N8N大学 的首席主编,我整理了 5 个最让人头秃的核心节点报错问题。这些全是血泪教训,看完这篇,保你少走半年弯路。
问题一:HTTP Request 节点报 401/403 身份验证失败
这是新手最容易踩的坑,没有之一。
当你使用 HTTP Request 节点调用 API 时,如果看到 401 Unauthorized 或 403 Forbidden,通常不是 n8n 的锅,而是你没给对钥匙。
很多人在 Auth 选项卡里胡乱填一通。如果是 Bearer Token,记得在 Value 里填入 Bearer 你的Token,不要只填 Token 本身。如果是 API Key,确认参数名是 Key 还是 api_key,这得看接口文档的脸色。
避坑指南: 90% 的 401 错误是因为 Token 过期或格式错误。先去 Postman 或浏览器里把请求跑通,再把参数原封不动搬到 n8n。
问题二:Set 节点数据格式乱套,下游节点读不到
Set 节点是 n8n 的数据调度中心,但很多人用错了姿势。
报错场景通常是:上游传了个数组,经过 Set 节点处理后,下游的 IF 或 Spreadsheet File 节点死活读不到数据,或者报 Cannot read property '0' of undefined。
原因很简单:Set 节点默认是在 Current Node's Output Data(当前节点输出数据)里操作。如果你不小心把数据层级改乱了,下游节点就懵了。
解决方案: 检查 Set 节点的 Keep Only Set 选项。如果你只想保留设置的字段,勾选它。但更推荐使用 Set 节点时,配合 Output Type 为 JSON,确保数据结构清晰。记住,n8n 的数据流是基于 JSON 对象的,结构一乱,全家完蛋。
问题三:IF 节点逻辑判断永远走 False 分支
明明数据里 status 字段是 "success",为什么 IF 节点总是走 False?
这不是玄学,这是类型转换的坑。n8n 的 IF 节点在比较时,对数据类型非常敏感。
比如,数据库查出来的布尔值可能是字符串形式的 "true",而 IF 节点里的判断条件如果是布尔值 true,它就会判断为 False。或者,数字被存成了字符串,比较大小时就会出错。
硬核技巧: 在 IF 节点之前,加一个 Set 节点,用表达式强制转换类型。例如,用 {{ $json.status == "success" }} 而不是直接判断字段是否存在。或者使用 Function 节点写一行 JS 代码:return items[0].json.status === 'success';,精准控制逻辑。
问题四:Spreadsheet File 节点读取 Excel 乱码或报错
想把 Excel 数据读进 n8n?Spreadsheet File 节点很强大,但也很挑剔。
常见报错:Error: ENOENT: no such file or directory 或者读出来的中文全是乱码。
原因分析:
- 路径问题: 如果你用的是 Docker 部署的 n8n,节点访问的是容器内的路径,而不是你宿主机的路径。文件必须挂载到容器内。
- 编码问题: 传统的 Excel (.xls) 和 .xlsx 的编码处理不同。中文乱码通常是因为 n8n 默认使用了 UTF-8,而 Excel 文件可能是 GBK 编码。
实战方案: 笔者建议,尽量使用 CSV 格式代替 Excel。CSV 是纯文本,编码问题少。如果非得用 Excel,确保文件保存为 .xlsx 格式,并在 Spreadsheet File 节点的 "Options" 中检查编码设置(虽然 n8n 对 xlsx 的编码支持较好,但偶尔仍需转换)。
问题五:Webhook 节点收不到请求(502 Bad Gateway)
Webhook 是 n8n 的入口,如果这里挂了,整个流程都废了。
场景:你配置好了 Webhook,去浏览器访问 URL,结果返回 502 Bad Gateway 或者 404 Not Found。
原因通常有三个:
- 公网 IP 未暴露: 如果你在本地跑 n8n,Webhook URL 是
localhost,外网是无法访问的。 - 端口未映射: Docker 启动时,必须把 5678 端口映射出来(
-p 5678:5678)。 - 防火墙/安全组: 服务器的防火墙没放行 5678 端口。
预防措施: 在生产环境,永远不要直接使用 n8n 自带的 Webhook。请务必在 n8n 前面加一层 Nginx 反向代理,并配置好域名和 SSL 证书。这不仅能解决 502 问题,还能提高安全性。
FAQ 问答
Q1: n8n 节点报错后,如何快速定位问题?
A: 点击节点查看 "Details" 面板,那里有详细的错误堆栈。如果是 HTTP 节点,先用 Postman 测试接口是否通;如果是逻辑节点,用 "Set" 节点打印中间变量,逐段排查。
Q2: 为什么我的 n8n 流程有时候会突然中断?
A: 检查 n8n 的内存设置。如果流程处理大量数据,Docker 默认的内存限制可能导致 OOM(内存溢出)被 Kill。建议给 Docker 分配至少 2GB 内存。
Q3: 节点参数里的表达式怎么写才不容易报错?
A: 善用 n8n 的自动补全。输入 {{ 后,n8n 会提示可用的变量。对于复杂逻辑,先在 Function 节点里调试好 JS 代码,再把逻辑简化到表达式中。
总结与资源
n8n 虽然强大,但它不是傻瓜相机。报错是常态,解决报错才是进阶的阶梯。记住 N8N大学 的核心理念:理解数据流,敬畏类型系统。
如果你在实战中遇到了上述报错,别慌,按照文中的步骤一步步排查。如果你有更刁钻的报错案例,欢迎在 N8N大学 社区留言,我们一起避坑。
更多硬核教程,欢迎访问 N8N大学 (n8ndx.com)。