第四章:n8n 核心节点实战手册
1. HTTP Request节点:打通外部数据通道
HTTP Request节点是n8n与外界交互的"万能钥匙",它能帮我们轻松获取网页数据、调用API接口。我第一次用这个节点时,就像发现新大陆一样兴奋——原来不用写爬虫代码也能抓取数据!
这个节点的配置界面看起来有点复杂,但其实核心就几个参数:
- URL:要访问的网址或API地址
- Method:请求方式(GET/POST/PUT等)
- Headers:请求头信息(比如API密钥)
- Body:POST请求时发送的数据
举个真实案例:去年我帮朋友搭建了一个天气提醒机器人。工作流是这样的:
- 每天早8点通过Schedule Trigger节点触发
- HTTP Request节点调用气象局API获取实时天气
- 提取温度、降水概率等关键数据
- 通过Telegram节点发送预警消息
// 典型的基础配置示例 { "url": "https://api.weather.com/v3/now", "method": "GET", "headers": { "Authorization": "Bearer your_api_key" } }新手常踩的坑是忘记处理HTTPS证书问题。如果遇到SSL错误,可以在节点高级设置里勾选"Ignore SSL Issues"。不过正式环境建议配置合法证书,这个选项仅用于测试。
2. Function节点:释放代码创造力
Function节点是我的最爱,它像乐高积木里的"万能零件",能用JavaScript/Python实现任何自定义逻辑。有次我接手一个电商项目,需要把凌乱的订单数据整理成标准格式,用这个节点20分钟就搞定了。
分享几个实用技巧:
- 数据清洗:用
map和filter处理数组 - 格式转换:JSON转CSV、时间戳转日期
- 复杂计算:统计指标、生成校验码
// 将摄氏温度转为华氏温度的例子 items = items.map(item => { item.json.fahrenheit = (item.json.celsius * 9/5) + 32; return item; }); return items;最近遇到个典型问题:有用户反馈Function节点执行报错,排查发现是数据类型不匹配。建议操作前先用typeof检查变量类型,或者用JSON.parse(JSON.stringify(data))做深拷贝避免引用问题。
3. IF节点:智能决策中枢
IF节点是工作流的"大脑",让流程具备判断能力。上周刚用它帮客户实现了个智能客服分流系统:根据用户问题类型自动分配处理渠道。
配置要点:
- 条件表达式:支持==、>、contains等运算符
- 多分支处理:可以添加多个条件分支
- 默认分支:处理未匹配的情况
实际案例:电商促销活动的工作流
- 检查订单金额是否满300元
- 检查是否VIP会员
- 根据不同组合给予不同优惠
- 无优惠条件的走普通流程
// 条件表达式示例 $input.all()[0].json.orderAmount >= 300 && $input.all()[0].json.isVIP === true有个容易忽略的细节:IF节点默认只检查第一个输入项。如果需要检查所有输入,要在表达式里用$input.all()获取完整数据。
4. 节点联动实战:构建完整工作流
单独节点就像散落的珍珠,需要串联起来才能发挥价值。去年我设计过一个智能家居自动化系统,核心就是节点间的默契配合。
典型工作流结构:
- 触发层:Webhook/Schedule Trigger
- 数据层:HTTP Request/Database节点
- 处理层:Function/IF/Set节点
- 输出层:Email/Telegram/API节点
以疫情前的会议室预约系统为例:
- HTTP Request获取会议室使用情况
- Function节点计算最佳时间段
- IF节点判断预约是否冲突
- Email节点发送确认通知
- Google Calendar节点添加事件
// 会议室冲突检测逻辑 const bookings = $input.all()[0].json.bookings; const newStart = new Date($node["Set"].json.startTime); const newEnd = new Date($node["Set"].json.endTime); const hasConflict = bookings.some(booking => { const bookingStart = new Date(booking.start); const bookingEnd = new Date(booking.end); return newStart < bookingEnd && newEnd > bookingStart; }); return [{ hasConflict }];调试复杂工作流时,建议多用"Execute Node"功能单独测试每个节点。遇到数据格式问题,可以用"Debug"模式查看详细数据结构。
