掌握你的第一个魔法
现代魔法编程思想
n8n 使用教程
n8n 实战案例
杂项
🆓半开放式节点(Code/HTTP Request)详细介绍
type
status
date
slug
summary
tags
category
icon
password
author
标签
第三方接入
和 Coze 这种全封装的在线服务式 Workflow 相比,n8n 最大的优势之一,就是半开放式节点。这些节点允许你在找不到官方适配的节点的情况下,手动适配一些功能。
在 n8n 里,最常用的两个这样的节点是 Code 和 HTTP Request。
前者意味着你可以直接写一段 Javascripts 或 Python 代码来实现 n8n 里没有内置的功能,后者则允许你向互联网上的任何 URL 发起 HTTP 请求,这意味着你能够将那些 n8n 里没有集成的服务(比如飞书、企业微信)集成到你的 Workflow 里。
在这个页面里,我们将详细的介绍这两个节点的用法。
如果你真的一点代码不想写,目前 n8n 官方云服务版提供了 AI Code 功能。直接输入自然语言需求,就能由 AI 生成符合你需求的 Code 节点。
1. Code 节点
Code 节点有三个参数,分别是 Mode、Language 和 JavaScript。
参数详解
Mode
选择 Code 节点的运行方式,分为 Run Once for All items 和 Run Once for Each Item。
顾名思义,就是当上游传来一组数据的时候,Code 节点是整组数据运行一次,还是每行数据运行一次。
比如说,如果你 Code 是要给一组数据中整体进行操作(增减一行,删除一列),你就选 Run Once for All items。
如果你想让 Code 是要针对一组数据中的每一行进行操作(每行中的某个字段做下修改),你就选 Run Once for Each Item。
Language
设定 Code 节点编写代码的语言,分为 JavaScripts 和 Python。你熟悉那种就可以用那种,但 n8n 在执行 JavaScripts 代码时更稳定。如果你不会这两种语言,在用 ChatGPT 结对编写 Workflow,建议选择 JavaScripts。
代码
第三个文本框就是个代码编辑框了,你在这个编辑框里可以编写这个节点实际要运行的代码。这里的代码同样支持 n8n 从上游引用变量的特性,但它不支持从 INPUT 面板直接拖拽,你需要手工编写变量。
比如,在我的这段示例代码中,$node["Aggregate"].json["data"] 就是上游节点的变量,它相当于给之 articles 这个 JavaScripts 变量注入了来自节点 Aggregate 的 data 数据。
如果你完全不会写代码,建议与 ChatGPT 结对编程。
注意事项
- Code 节点默认只引用了少数的 JavaScripts 库,如需使用更多库,可参阅官方文档:‣
- Code 节点不支持向本地服务器读取或写入文件,你需要先用 Read File(s) From Disk 或 Write File to Disk 节点来处理读取和写入的步骤。
- Code 节点不支持发起 HTTP 请求,你需要使用 HTTP Request 节点来处理远端请求。
- Code 节点的 Python 移植自 Pyodide,这意味着它仅包含极少数的库,且性能较差。
2. HTTP Request
顾名思义,这个节点的作用是向任何网址发起一个 HTTP Request。
关于 HTTP Request 的科普
什么是 HTTP Request?
HTTP 请求是在网络中进行通信的一种方式。HTTP 是 "超文本传输协议" 的缩写,它定义了客户端(通常是网页浏览器)如何向服务器发送数据请求,以及服务器如何对这些请求做出响应。在 HTTP 请求中,客户端会发送一个请求到服务器,请求包含一个请求方法(如 GET、POST 等),一个 URL,和可选的额外信息,如请求头或消息体。服务器收到请求后,会根据请求的内容进行处理,并返回一个 HTTP 响应,响应中包含了状态码(表示请求成功或失败),响应头,以及响应的正文内容。因此,HTTP 请求是构建和交互网络应用的基础,它让我们能够浏览网页,提交表单,下载文件,等等。
简单来说,你在浏览器里点击一个链接、按下一个按钮都是 HTTP Request。
HTTP Request 节点在各种情况下都非常有用。常见的使用场景包括:
- 从 API 获取数据:许多在线服务(如天气预报、股市信息、社交媒体平台等)都提供 API 来访问其数据。使用 HTTP Request 节点,你可以在 n8n 中直接调用这些 API,从而获取你需要的数据。
- 提交数据到 API:除了获取数据,你也可以使用 HTTP Request 节点将数据提交到API。例如,你可能需要向某个服务提交表单数据,或者向某个数据库 API 提交新的记录。
- 触发网页爬虫:如果你正在运行一个网页爬虫,你可以使用 HTTP Request 节点来触发爬虫的运行,从而抓取网页上的数据。
- 与未在 n8n 中集成的服务进行交互:如果你希望使用的某个在线服务没有在 n8n 中集成,你可以使用 HTTP Request 节点来与该服务进行交互。只要这个服务提供了 API,你就可以通过发送 HTTP 请求来调用这个 API,从而实现与该服务的交互。
最典型的用法:n8n 没有内置国产大模型和飞书、企业微信的节点,如果你需要集成这些外部服务,你就需要 HTTP Request。
参数详解
Method - 定义发起何种类型的 HTTP Request,n8n 支持以下类型的 HTTP Request。
方法 | 描述 |
GET | 从指定的资源请求数据。这是最常用的 HTTP 方法。数据被检索而不被修改。 |
POST | 向指定的资源提交数据进行处理。常用于提交表单数据或上传文件。 |
PUT | 用新数据更新当前资源。用提供的数据替换整个资源。 |
DELETE | 删除指定的资源。 |
HEAD | 类似于 GET,但只传输状态行和头部部分。用于在实际请求之前检查 GET 请求将返回的内容。 |
OPTIONS | 描述目标资源的通信选项。用于 CORS 预检请求,以检查允许的 HTTP 方法。 |
PATCH | 部分更新资源。只更改指定的字段,而不是替换整个资源。 |
URL - 向哪个地址发起 HTTP Request。
Authentication - 是否发起带有 HTTP Request 带有权鉴的请求,它有三个选项 None(无权鉴),Predefined Credential Type(n8n 预制的权鉴类型),Generic Credential Type(完全自定义的权鉴类型)。
Send Query Parameters - 请求时添加额外的查询参数。
Send Headers - 请求时添加额外的的 Headers。
Send Body - 请求时添加额外的 Body,通过 Body 来发送长参数或提交内容。
如果你不能理解这些方法的具体作用也不要紧,一般来说,你要接入的服务 API 都有自己的文档,他们的文档会告诉你他们的请求应该包含什么内容。
简单来说,一个 HTTP 请求是由 URL 定义向哪里请求,由 Authentication 告诉对方你是谁(比如账号密码),由 Send Query Parameters 决定请求什么的。
n8n 的 HTTP Request 调试界面并不是特别友好,我的建议是你在 Postman 或 RapidAPI 进行调试。这两个都是 API 调试工具,它不是编程工具,主要就是帮助你构建一个 API 请求。然后,你可以在这些工具中找到一个功能是导出为 curl。在 n8n 的 HTTP Request 节点的面板右上角有一个功能叫 Import cURL,你直接把导出的内容复制进去就可以了。
如果你想详细了解 API 调试教程,你可以参考 Apifox 的这个教程,写的非常详细:
案例
本案例完整参见: 将稍后阅读里的文章存入 notion
这个完整 Workflow 的作用,是当稍后阅读 Ominivore 中收藏的文章全文,存入 Notion 里。在此处,我们只解释最后一部分 HTTP Request 的部分,在这里 HTTP Request 的作用是将上游传递过来的一包已经处理好的 json 数据推送给 notion 指定的页面。
我们详细解释一下在这里 HTTP Request 的设置:
Method - PATCH,这是依据 notion 的 API 文档设置的。notion API 中添加 block 的方法叫 Append block children,它是一个 PATCH 型的 API 端口,所以这里要选 PATCH。
URL -
https://api.notion.com/v1/blocks/
{{ $('Notion').item.json.id }}/children
,这里是指 API 的地址。我们根据 notion 官方的文档得知,我们需要直接在 URL 里填入需要向哪个 notion 页面添加 block。所以,我们在这个地址中引入了一个 Workflow 上游的变量,也就是 {{ $('Notion').item.json.id }}
。Authentication - n8n 内置了 notion 的权鉴,所以这里我们选择 Predefined Credential Type,然后在 Credential Type 中寻找 notion,再在 Notion API 处按照提示添加一个 notion 的凭证。
Send Query Parameters - 因为我们要推送一个很长的内容上去,所以我们这里不用 Send Query Parameters。
Send Headers - 不设置。
Send Body - 这里要打开,我们需要通过 Body 来传递文章正文。
Body Parameters - 添加一个 body 参数,Name 为 children(由 notion API 官方定义),它的值为
{{ $json.data }}
,也就是上游传递过来的一包 json。Options 下打开 Batching - 设置为没批 1 个 items,每次停 4 秒。这避免了提交太快,被 notion 的 API 拉黑。
3. 发散
有了 Code 和 HTTP Request,你实际上可以在 n8n 里实现很多其他低代码平台实现不了的功能。
但是用 Code 和 HTTP Request 节点的难度较高,如果你是零基础的小白,建议多问问 ChatGPT 或 Monica。
广告
Loading...
Last update: 2024-06-17
🎉简单易懂的现代魔法 1.0 已经上线🎉
-- 感谢您的支持 ---
👏欢迎体验低代码的魅力👏