n8n 使用方式与典型场景
使用方式与典型场景
示例一:Webhook 触发后调用外部接口
目标:外部系统 POST 一个 JSON 过来,n8n 取出其中的邮箱字段,调用内部接口查询用户,再把结果返回给调用方。整个流程只需要三个节点:Webhook(触发)到 HTTP Request(查询)到 Respond to Webhook(返回)。导出成 workflow JSON 后,关键字段长这样:
{
"name": "user-lookup-by-webhook",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "user-lookup",
"responseMode": "responseNode",
"options": {}
},
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [240, 300],
"webhookId": "a1b2c3d4-0000-0000-0000-000000000000"
},
{
"parameters": {
"method": "GET",
"url": "https://internal.example.com/api/users",
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "email",
"value": "={{ $json.body.email }}"
}
]
},
"options": {
"timeout": 10000
}
},
"name": "HTTP Request",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [480, 300]
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ { \"ok\": true, \"user\": $json } }}"
},
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [720, 300]
}
],
"connections": {
"Webhook": {
"main": [[{ "node": "HTTP Request", "type": "main", "index": 0 }]]
},
"HTTP Request": {
"main": [[{ "node": "Respond to Webhook", "type": "main", "index": 0 }]]
}
},
"settings": {
"errorWorkflow": "error-notifier"
}
}
三处值得注意。responseMode 设为 responseNode 时,返回内容由 Respond to Webhook 节点决定,否则 webhook 收到请求就会立刻返回。={{ $json.body.email }} 里的 body 是 Webhook 节点对 POST 请求体做的包装,GET 的查询串在 query 下,路径参数在 params 下。typeVersion 是节点版本号,导入到不同 n8n 版本时如果版本不兼容会自动降级或提示,跨版本迁移前建议在测试实例先导入一次。
示例二:表达式与 Code 节点做数据整形
上游拿到一批订单,需要只保留金额大于阈值的记录,并把金额换算成以分为单位。用 Set 节点加表达式可以完成简单映射:
{{ $json.orderId }}
{{ $json.amountCents / 100 }}
{{ $now.setZone("Asia/Shanghai").toFormat("yyyy-MM-dd HH:mm") }}
涉及过滤和结构改写时,Code 节点更直接:
const threshold = 10000;
const out = [];
for (const item of $input.all()) {
const amount = Number(item.json.amountCents || 0);
if (amount > threshold) {
out.push({
json: {
orderId: item.json.orderId,
amountYuan: (amount / 100).toFixed(2),
source: $workflow.name,
executionId: $execution.id
}
});
}
}
return out;
这段代码一次拿到全部 item,过滤后返回新数组,下游节点收到的 item 数量就等于过滤后的条数。$execution.id 和 $workflow.name 建议写进结果里,出问题能顺着 ID 回到具体那次执行。
适合与不适合的场景
- 适合:SaaS 与内部系统的数据同步;表单提交后的通知、建档、写库;定时拉取报表并推送;给内部接口做一层聚合网关;把大模型能力插进既有业务流程(用 HTTP Request 节点调用模型接口)。
- 不适合:超大规模高吞吐的实时流处理(这类需求用消息队列加专门的流处理框架更合适);强一致性的金融交易核心链路;亚秒级响应的在线请求主链路。n8n 的定位是集成与编排层,不是业务主链路。
- 要谨慎:把非常复杂的业务逻辑全部塞进 Code 节点,会让流程变得比写代码更难维护。判断标准是,如果一段逻辑需要单元测试和版本分支,就该做成独立服务,n8n 只负责调用。

