Github
https://dash.cloudflare.com/
用域名添加站点,然后点击“Workers”

点击“管理 Workers”,
部署一个 Workers,并使用以下代码

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
| const html404 = `<!DOCTYPE html> <body> <h1>404 Not Found.</h1> <p>The url you visit is not found.</p> </body>`
async function randomString(len) { len = len || 6; let $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'; let maxPos = $chars.length; let result = ''; for (i = 0; i < len; i++) { result += $chars.charAt(Math.floor(Math.random() * maxPos)); } return result; } async function checkURL(URL){ let str=URL; let Expression=/http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/; let objExp=new RegExp(Expression); if(objExp.test(str)==true){ if (str[0] == 'h') return true; else return false; }else{ return false; } } async function save_url(URL){ let random_key=await randomString() let is_exist=await LINKS.get(random_key) console.log(is_exist) if (is_exist == null) return await LINKS.put(random_key, URL),random_key else save_url(URL) } async function handleRequest(request) { console.log(request) if (request.method === "POST") { let req=await request.json() console.log(req["url"]) if(!await checkURL(req["url"])){ return new Response(`{"status":500,"key":": Error: Url illegal."}`, { headers: { "content-type": "text/html;charset=UTF-8", "Access-Control-Allow-Origin":"*", "Access-Control-Allow-Methods": "POST", }, })} let stat,random_key=await save_url(req["url"]) console.log(stat) if (typeof(stat) == "undefined"){ return new Response(`{"status":200,"key":"/`+random_key+`"}`, { headers: { "content-type": "text/html;charset=UTF-8", "Access-Control-Allow-Origin":"*", "Access-Control-Allow-Methods": "POST", }, }) }else{ return new Response(`{"status":200,"key":": Error:Reach the KV write limitation."}`, { headers: { "content-type": "text/html;charset=UTF-8", "Access-Control-Allow-Origin":"*", "Access-Control-Allow-Methods": "POST", }, })} }else if(request.method === "OPTIONS"){ return new Response(``, { headers: { "content-type": "text/html;charset=UTF-8", "Access-Control-Allow-Origin":"*", "Access-Control-Allow-Methods": "POST", }, })
}
const requestURL = new URL(request.url) const path = requestURL.pathname.split("/")[1] console.log(path) if(!path){
const html= await fetch("https://cdn.jsdelivr.net/gh/xyTom/Url-Shorten-Worker@gh-pages/index.html") return new Response(await html.text(), { headers: { "content-type": "text/html;charset=UTF-8", }, }) } const value = await LINKS.get(path) console.log(value)
const location = value if (location) { return Response.redirect(location, 302) } return new Response(html404, { headers: { "content-type": "text/html;charset=UTF-8", }, status: 404 }) }
addEventListener("fetch", async event => { event.respondWith(handleRequest(event.request)) })
|
Q:如何24小时后删除地址?
A:参考https://developers.cloudflare.com/workers/runtime-apis/kv#creating-expiring-keys
将原代码
index.js 中的第 36 行的
return await LINKS.put(random_key, URL),random_key
修改为:
return await LINKS.put(random_key, URL, {expirationTtl: 606024}),random_key
KV 添加一个命名空间

绑定命名空间
