如何在n8n自定义节点中读取URL参数?
在n8n自定义节点中获取iframe嵌入时的URL参数
核心原因
n8n的自定义节点运行在后端Node.js环境,而非前端浏览器环境,所以无法直接访问前端的window对象,这就是你用window.location.href报错的原因。
可行解决方案
要获取iframe的URL参数,必须先把前端的参数传递到n8n后端的工作流中,再在自定义节点里读取,以下是几种常用方法:
1. 通过Webhook节点中转参数
- 在你的n8n工作流中添加一个Webhook节点,设置触发方式为
POST或GET。 - 嵌入iframe的前端页面,在加载时将iframe的URL参数(比如
token)通过API请求发送到这个Webhook地址,把参数放在请求体或查询参数里。 - 自定义节点可以从Webhook节点的输出中读取参数,示例代码:
// 从Webhook的请求查询参数中直接获取token const token = $input.first().json.query.token; // 如果前端传的是完整iframe URL,用url模块解析参数 const url = require('url'); const incomingUrl = $input.first().json.url; // 前端传过来的完整iframe URL const params = new url.URLSearchParams(new URL(incomingUrl).search); console.log(params.get('token'));
2. 调用工作流API时传递参数
如果你的工作流是通过API触发的,在调用n8n的/workflow/{id}/trigger接口时,将iframe的URL参数作为payload的一部分传入:
- 前端请求示例(伪代码):
fetch('https://your-n8n-instance.com/api/v1/workflow/xxx/trigger', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ data: { iframeUrl: window.location.href // 把当前iframe的完整URL传给工作流 } }) });
- 自定义节点中读取参数:
const url = require('url'); const iframeUrl = $input.first().json.data.iframeUrl; const params = new url.URLSearchParams(new URL(iframeUrl).search); console.log(params.get('token'));
3. 利用用户会话传递(适用于用户身份类参数)
如果参数是用户令牌这类和会话绑定的内容,可以通过n8n的认证节点(比如OAuth2、JWT)将参数存入用户会话,然后在自定义节点中通过上下文读取:
// 从工作流上下文中获取会话参数 const context = this.getWorkflowContext(); const token = context.user.token;
关键注意事项
- 自定义节点完全运行在后端,和前端iframe属于不同的运行环境,无法直接读取前端的URL,必须通过显式的参数传递完成。
- Node.js环境中可以直接使用内置的
url模块或原生URL类解析参数,无需额外安装依赖。
内容的提问来源于stack exchange,提问作者Yasin Tahasildar
相关产品推荐
相关产品推荐

