无服务器 自建短链服务 Url-Shorten-Worker 增加读取Cloudflare KV 中全部记录的功能
需求
饮食健康 2024年1月2日 GMT+8 03:52:00
希望能添加从cloudflare查询以往添加的短链接的功能,不然如果清除了浏览器缓存或在另一台电脑上想要查询和管理短链接的话必须登录cloudflare才行,比较麻烦。
我一开始设计这个短链系统的时候, 是作为可以和熟悉的人共同使用的, 所以我使用浏览器的localStorage的好处是, 每个人都只看到自己添加过的短链. 不会互相干扰, 我后来添加了删除短链的功能, 你也不会误删别人的短链.
但是, 既然有人特别提出来了, 那么我再想想, 如果这个系统是只给我自己一个人用呢, 那么这个读取KV的需求是合理的.
思路
参考官方文档 https://developers.cloudflare.com/kv/api/list-keys/
list() 可以返回全部的 key 的列表(也就是短链). 然后再分别查询得到 value (也就是长链), 再拼接为一个JSON结构返回给前端页面.
设计数据结构
前端发给后端的JSON结构, 设计一个命令 qryall
{cmd: 'qryall',password: 'bodongshouqulveweifengci'}
后端返回给前端的JSON结构
{"status":200,"error":"","kvlist":[{"key":"mtSzm6","value":"https://1way.eu.org/bodongshouqulveweifengci"},.... etc ...]}
编写代码
前端页面用到的main.js增加一个loadKV()函数
前端页面 index.html 增加一个按钮去调用 loadKV()后端实现 worker.js 增加对 qryall 命令的处理
========
完
Github: https://github.com/crazypeace/Url-Shorten-Worker
加了一个开关, 默认关闭.
演示站是打开此功能的. https://1way.eu.org/mtSzm6
* 不排除未来因为功能互相之间冲突(或影响效果), 演示站关闭此功能.
========
update
重要提醒! list() 每天只能免费 1000 次
赞赞赞
回复删除点击后会显示所有的KV值,于是我加了个简单的判断。
回复删除for (var i = 0; i < keyList.keys.length; i++) {
if (keyList.keys[i].name.includes("-count") == false)
if (keyList.keys[i].name.includes("password") == false) {
let item = keyList.keys[i];
let url = await LINKS.get(item.name);
let newElement = { "key": item.name, "value": url };
// 填充要返回的列表 Fill the return list
jsonObjectRetrun.kvlist.push(newElement);
}
}
}
我本来想把两个if合并成一行的,但不起作用。
不知道为什么,我只懂简单的代码。
哇, 你太棒了! 开源的世界就应该是这样, 有想法就自己动手! 代码的世界里就是 talk is cheap, show me the code!
删除虽然你的代码能力不足, 但是你愿意show出你的code, 与我交流, 我非常开心!
建议你注册一个Github账户, fork我的项目, 然后在你自己的项目里实施你的修改.
代码方面, 我会协助你的.
-
如果你不愿意实施你自己的项目, 也请告诉我. 我们可以在本文的评论里交流修改思路.
https://zelikk.blogspot.com/2024/01/url-shorten-worker-password-protect-keylist.html
删除https://zelikk.blogspot.com/2024/01/url-shorten-worker-count.html