【datawhale组队学习】n8n – TASK05 实战演练:基于高德地图API的天气服务节点开发

【datawhale组队学习】n8n – TASK05 实战演练:基于高德地图API的天气服务节点开发

如果你用过n8n,肯定知道它内置了上百个节点,能连GitHub、发Slack消息、管数据库,功能确实强大。但不知道你有没有遇到过这种情况:想查一下某个城市的天气,然后根据天气情况自动决定要不要给家里的智能插座发指令关窗,或者给团队发个“明天有雨记得带伞”的提醒。你翻遍了n8n的节点库,发现官方没有提供天气服务节点,社区里可能也找不到刚好符合你需求的。这时候怎么办?等官方更新?不太现实。用HTTP Request节点自己拼?每次都要写URL、处理参数、解析JSON,麻烦不说,还容易出错,更别提鉴权信息的安全管理了。

这就是我们今天要解决的问题:自己动手,丰衣足食。我们将基于国内非常稳定且免费额度充足的高德地图Web服务API,开发一个专属于我们自己的天气服务节点。这个节点做好之后,会像官方节点一样,出现在你的节点面板里,有清晰的图标、友好的配置表单,你只需要拖拽、选择城市、连接起来,就能拿到结构化的天气数据,直接用于后续的工作流。整个过程,你会亲身体验到n8n社区节点开发的完整流程,从API申请、代码编写、本地调试到最终使用。

我刚开始接触n8n自定义节点时,也觉得有点发怵,感觉要懂TypeScript、懂它的架构。但实际做下来发现,n8n为开发者考虑得非常周到,尤其是它推荐的“声明式”开发模式,大部分工作其实就是写一个结构清晰的JSON配置对象,把API的地址、参数、鉴权方式描述清楚,n8n的引擎就会自动帮你处理请求、错误重试、分页这些脏活累活。这次我们选择高德地图API,一是因为它对国内开发者非常友好,申请简单,二是它的天气接口返回的数据很规范,非常适合作为我们第一个自定义节点的练手项目。

想象一下这个场景:你有一个每天早上8点运行的自动化工作流,它会获取你所在城市的天气实况和预报,如果预报当天有雨,就自动通过企业微信机器人给你和你的家人发一条带伞提醒;如果气温超过35度,就自动打开客厅的智能空调提前降温。这一切,都可以通过我们今天要开发的这个节点轻松实现。所以,这不仅仅是一个技术练习,更是一个能立刻投入使用的生产力工具。接下来,我们就一步步把它实现出来。

开发任何依赖第三方API的服务,第一步永远是搞定访问凭证,也就是我们常说的API Key或Token。高德地图开放平台在这方面做得非常简洁,对个人开发者和小规模使用非常友好,每天有足够的免费调用次数,足够我们学习和做很多有趣的自动化了。

首先,打开你的浏览器,访问高德地图开放平台的控制台。如果你还没有账号,需要先注册一个,这个过程就是常规的邮箱或手机号注册,按照提示操作就行,几分钟就能完成。注册成功后,平台会要求你进行实名认证,这是国家法规的要求,也是为了保障服务的安全使用。认证过程通常需要提供身份证信息,按照页面指引完成即可,一般审核速度很快。

认证通过后,再次登录控制台,你会看到界面。我们需要创建一个新的“应用”来获取Key。点击“应用管理” -> “我的应用” -> “创建新应用”。应用名称你可以随便取,比如“n8n天气自动化”,应用类型选择“Web服务”。这里有个关键点,高德地图的API Key是和应用绑定的,并且会根据你选择的服务平台(如Web端、Android、iOS)有所不同。因为我们是在n8n的后端服务器环境中调用API,所以务必选择“Web服务”这个平台。选错了可能会导致后续调用失败。

创建应用后,点击这个应用,进入其详情页,然后点击“添加Key”按钮。系统会为你生成一个一串字母和数字组合的API Key,把它妥善保存好,最好复制到你的密码管理器或者一个临时的文本文件里,因为接下来我们在代码里会用到它。这里我提个醒,这个Key就像你家的钥匙,千万不要直接提交到公开的GitHub仓库里,否则别人可以用你的Key来调用服务,可能导致额度被耗尽甚至产生费用。我们后续会把它安全地配置在n8n的“凭证”系统中。

拿到Key之后,我建议你先别急着写代码,花几分钟去高德的API文档页面看看。搜索“天气查询”相关文档,了解一下我们即将使用的接口。我们主要会用到两个接口:,它可以通过一个参数控制是返回实时天气还是预报天气。文档里会详细列出请求的URL、必需的参数(比如我们刚拿到的和城市编码)、返回的JSON数据结构。提前熟悉这些,能让你在写代码时心里更有底,知道我们要处理的数据长什么样。比如,你会发现返回的天气状况不仅有中文描述,还有对应的天气现象代码,这对于我们后续做条件判断(比如是否是雨天)非常有用。

好了,钥匙(API Key)到手了,接下来我们得找个地方来打造我们的工具(节点)。n8n官方非常贴心地为我们准备了一个节点开发模板项目,这个模板已经把项目结构、编译脚本、基础依赖都配置好了,我们能省去大量搭建环境的时间。

首先,确保你的电脑上已经安装了Node.js(建议版本16或以上)和npm。打开你的终端或命令行工具,找一个你喜欢的目录,比如,然后执行命令来克隆模板项目。这个模板项目是一个标准的TypeScript项目,里面已经包含了两个示例节点,我们可以参考它们的结构。克隆下来后,用你顺手的代码编辑器打开这个项目,我习惯用VSCode,因为它对TypeScript的支持非常好。

让我们快速浏览一下项目的核心目录结构,这能帮你理解各个文件是干什么的:


我们的工作主要会在和这两个目录下进行。目录下,每个子目录代表一个独立的节点。今天我们要在目录下创建一个新的文件夹,就叫(高德地图的英文缩写)。这个文件夹,就是我们这个天气节点的“家”,里面会存放这个节点所有的代码和资源文件。

在动手创建文件之前,我们需要先安装项目依赖。在项目根目录下打开终端,运行。这个命令会根据里的描述,把开发节点所需的所有库,比如(里面包含了节点开发需要的所有类型定义)、编译器等等都下载下来。安装过程可能需要一两分钟,取决于你的网络速度。安装完成后,你可以试着运行一下模板里已有的示例构建命令,比如,看看环境是否正常。如果一切顺利,你会看到终端输出编译成功的提示,并且在项目根目录下生成一个文件夹,里面就是编译好的JavaScript代码。这说明我们的开发环境已经准备就绪了。

环境搭好了,现在进入最核心的环节——编写节点逻辑。前面提到n8n支持两种开发风格:程序式和声明式。对于高德地图天气API这种标准的RESTful接口,我们强烈推荐使用声明式。这种方式n8n 工作流 教程就像填表格,你不需要写具体的发送HTTP请求、处理响应的代码,只需要在一个JSON-like的结构里,清楚地告诉n8n:“我要调用这个URL,用GET方法,这是参数,那是鉴权信息。” n8n的引擎会自动帮你完成剩下的所有事情,非常省心。

4.1 创建节点描述文件

在刚才创建的目录下,我们新建一个文件,命名为。这个后缀代表它是TypeScript文件。我们将在这个文件里定义节点的“灵魂”——一个实现了接口的类。

打开这个文件,我们先引入必要的类型定义,然后开始构建我们的类。类的核心是一个对象,这个对象描述了节点的方方面面。我来给你拆解一下里面几个关键的属性:

  • 和: 这是在n8n节点面板里显示的名字和内部标识。我们设为“AMap高德地图”,用。
  • : 节点的图标。你可以找一个高德地图的Logo,存成放到同一个目录下,这里引用就行。如果暂时没有,可以先留空或用个默认图标。
  • : 决定节点在面板的哪个分组里。我们放在分组,表示它是一个获取数据的输入节点。
  • : 节点版本,从1开始。
  • : 节点在工作流画布上显示的子标题。这里我们用了一个动态表达式,这样当用户在节点里选择不同操作(比如“获取实况天气”)时,子标题会跟着变,非常直观。
  • : 设置节点的默认名称。
  • : 这里配置所有请求共用的基础设置。我们把高德API的基础URL 放在里,并把默认输出格式设为。这样,后面定义具体操作时,就不用重复写完整的URL了。

4.2 定义资源、操作与参数

接下来是数组,这里定义了用户配置节点时需要填写的所有字段。我们遵循RESTful的思想来设计:

  1. 资源(Resource):我们只有一个资源,就是“天气”(weather)。用一个下拉选择框让用户选。
  2. 操作(Operation):针对“天气”这个资源,我们提供两个操作:“获取实况天气”(getWeather)和“获取预报天气”(getForecast)。同样用下拉框实现。
  3. 参数(Parameters):对于天气查询,最重要的参数就是城市。我们定义一个字段,类型是字符串,让用户输入城市编码(比如北京是)。这里有个技巧:使用属性,可以控制这个参数只在为时才显示出来,界面更清爽。

最精彩的部分来了:如何把用户的选择变成具体的API请求?答案就在配置里。在“获取实况天气”这个操作的配置项里,我们添加一个属性,在里面描述请求:


看到了吗?我们不需要写或代码。我们只是声明:用GET方法,请求路径是(它会自动拼接到前面设置的后),查询参数的值来自用户填写的参数,参数设为表示只返回实况天气。对于预报天气,只需把改为即可。这种声明式的写法,既简洁又强大。

4.3 实现安全的鉴权类

现在节点知道怎么请求了,但还缺最重要的API Key。我们绝不能把Key硬编码在节点代码里。n8n提供了优雅安全的凭证(Credentials)管理系统。我们需要在目录下创建一个新的文件,比如。

在这个文件里,我们定义一个类,实现接口。这个类主要做两件事:

  1. 在里定义一个类型为密码的字段。当用户在n8n界面添加这个凭证时,输入框会是密文形式,n8n也会加密存储它。
  2. 在属性里,定义如何将这个凭证应用到请求上。高德地图API是通过查询参数来传递的,所以我们这样配置:

这行配置的意思是:在请求的查询字符串(qs)里,自动添加一个参数,其值来自用户保存的凭证中的字段。这样一来,我们的节点代码完全接触不到真实的Key,用户也只需要在n8n的凭证管理界面配置一次Key,就可以在所有用到高德地图节点的工作流中安全地使用了。

最后,别忘了在文件的对象里,通过字段声明这个节点需要依赖这个凭证,并且是必需的()。这样,用户在配置这个节点时,n8n就会提示他必须先选择或创建一个高德地图的API凭证。

代码写完了,但要让节点能在n8n里被识别和使用,还需要最后几步“包装”工作。

5.1 创建节点元数据文件

在目录下,我们还需要创建一个文件。这个文件是节点的“说明书”或“身份证”,它告诉n8n这个节点的一些额外信息,主要用于在n8n的节点商店(如果你未来要发布)里展示。内容相对固定:


其中,字段的值必须和你在文件里定义的类名(属性)保持一致。定义了节点所属的分类,我们先放在“杂项”里。里的链接为用户提供了快速查看API文档的入口,非常贴心。

5.2 编译与本地链接

现在,让我们把TypeScript代码变成n8n能运行的JavaScript。在项目根目录下运行编译命令。如果编译成功,你会看到目录下生成了对应的文件。

接下来是一个关键步骤:如何让我们本地开发的节点,被我们本地运行的n8n实例加载?我们使用。首先,在节点项目的根目录下执行。这个命令会在全局的npm模块目录中,为我们这个节点包创建一个符号链接。

然后,我们需要找到n8n存放自定义节点的目录。对于全局安装的n8n,这个目录通常是(Linux/macOS)或(Windows)。进入这个目录,如果不存在就创建它。在这个目录下,我们需要初始化一个文件(执行即可),然后执行(这里的包名取决于你在项目里定义的)。这个操作就像是在n8n的自定义节点目录里,创建了一个指向我们开发中源码的快捷方式。

5.3 测试与使用

完成链接后,启动你的n8n服务(在命令行输入)。打开n8n的Web界面(通常是),创建一个新的工作流。点击添加节点,在搜索框里输入“amap”或者“高德”,你应该就能看到我们刚刚开发的“AMap高德地图”节点了!把它拖到画布上。

第一次配置这个节点时,n8n会提示你需要一个“AMap API”凭证。点击“创建新凭证”,把之前申请的高德地图API Key粘贴进去,给凭证起个名字保存。然后,在节点配置里,选择“天气”资源,操作选择“获取实况天气”或“获取预报天气”,输入城市编码(比如上海是)。点击“执行节点”按钮,如果一切配置正确,你会在右侧的输出面板看到从高德地图API返回的、格式规整的天气JSON数据了。你可以展开这些数据,看到温度、湿度、风力、天气状况等详细信息,这些数据可以直接被后续的节点使用。

第一个能跑的节点做出来了,很有成就感吧?但要让这个节点更健壮、更好用,我们还可以做一些优化,这也是我实际开发中踩过坑后总结的经验。

错误处理与用户体验:高德地图API调用可能会失败,比如网络问题、Key无效、城市编码错误等。在声明式开发中,我们可以利用n8n内置的错误处理机制。但更好的做法是,在节点描述里,通过的或属性,给用户清晰的提示。比如,在参数旁边,可以提示“请输入城市行政区划编码,如北京:”,并附上高德官方编码查询文档的链接。这能极大减少用户出错的可能。

响应数据的预处理:有时候API返回的原始数据格式可能不太适合直接在工作流里使用。比如,温度值可能是一个字符串带单位“℃”。我们可以在节点里添加“输出字段”定义,或者利用n8n的表达式,在后续节点中对数据进行清洗和转换。但更优雅的方式,是在节点本身的配置中,使用属性来定义数据如何映射。不过对于初学者,我建议先原样输出,把数据转换的工作留给后续的“代码”节点或“函数”节点,这样更灵活。

关于城市编码的输入方式:让用户直接输入数字编码确实不够友好。一个显著的优化点是,我们可以将参数的类型从改为,并配置一个搜索URL,让用户可以直接搜索城市名,然后节点自动获取对应的编码。但这需要高德提供相应的地点搜索API配合,并涉及更复杂的异步请求处理,属于进阶功能。作为初版,输入编码是简单可靠的方案,你可以把这个优化点记下来,作为节点2.0版本的目标。

调试技巧:开发过程中,如果节点没出现,或者配置了没反应,别慌。首先,检查n8n启动时的日志,看有没有加载自定义节点的成功或失败信息。其次,确保目录下的里正确引用了你的节点包名。最常用的方法是在节点代码里多使用输出调试信息,但注意这些日志会输出在n8n服务端的控制台,而不是浏览器里。另外,高德地图API的响应里通常包含和字段,如果不是“1”,就说明请求有问题,字段会给出错误原因。你可以在工作流里接一个“代码”节点,把API的原始响应打印出来,便于排查。

版本管理与发布:当你完善了这个节点,并且觉得它可能对其他人也有用时,可以考虑将它发布到npm上,成为一个真正的社区节点。你需要给你的节点包起一个独特的名字,比如,遵循的命名约定。然后更新中的相关信息,编写清晰的,最后使用命令发布。发布后,其他n8n用户就可以像安装任何社区节点一样,在n8n的设置界面搜索并安装你的天气节点了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:Ai探索者,转载请注明出处:https://javaforall.net/277577.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月14日 上午8:15
下一篇 2026年3月14日 上午8:15


相关推荐

关注全栈程序员社区公众号