最近有个小玩具要做,想要能够通过授权链接来给公司的阿里云服务器添加白名单。最开始想到这个事情的时候,就决定用 Cloudflare 的 Worker 或者 Pages 来做,因为开发方便,又不需要自己搞服务器来部署服务端和数据库。也因此踩了个小坑,特此记录。

首先我选择了 Pages,因为可以加前端页面,前后端都写到一个项目里,反正是个小玩具。前端不赘述了,用 Cursor 直接简单描述一下就能生成,包含登录页和功能页两个页面,用 Pages 提供的 Function 能力直接进行 JWT 鉴权,开发得飞快。然后核心功能点就是功能页里的授权白名单按钮了。
这个功能从 Cloudflare 的 Request 中拿到访问的 IP,然后和 D1 数据库里用户上次授权的 IP 进行比较,如果相同则不去阿里云授权,如果不相同,则删除用户上次授权的 IP,然后再添加新的。此时我去阿里云的开发者网站上找 OpenAPI,只看到了几个 SDK 的使用示例,而且做得还挺不错的。于是挑选了一个 Node.js 的 SDK 然后开发这个功能,开发也异常顺利,我直接上传到 Cloudflare 进行测试,突然看到报错:

[unenv] https.request is not implemented yet!

我是知道 Worker 是一个不完整的 Node.js 环境的,但是没想到这个包也没有,关键是阿里云的 SDK 没有提供修改“网络请求实现”的方法,我也没在阿里云的开发者网站上发现直接的 RESTful 调用方法。

当我一筹莫展的时候,我发现阿里云的官网上有个 AI 功能,就是这个按钮:

没抱啥希望地点开问了问,居然真的给我找到了 RESTful 接口的调用方式,并且还让它直接生成了可用的代码:


我把使用 fetch 的代码丢给 Copilot,然后让 Copilot 参考一下,把之前使用 SDK 的代码换成新的使用 fetch 的,直接一把搞定。

总结起来两个坑:

  1. 阿里云其实是有 RESTful 的调用方式的,不过官方示例工具里只提供了 SDK 的示例,通过 AI 能够查到,估计是隐藏得比较深吧。
  2. Worker 环境里很多 Node.js 包不可用,都需要使用 Worker 专用的包,GitHub 有很多,不过Worker现在支持的Node 包也越来越多了。
    本该俩小时搞定的东西,最后搞了一天。


0 条评论

发表回复

Avatar placeholder

您的邮箱地址不会被公开。 必填项已用 * 标注