CloudflareWorkers 是Cloudflare 推出的一项无服务器代码运行服务,国内一般叫边缘计算、云函数之类的。
CloudflareWorkers 主要支持 JavaScript、Rust、C、C++(泛指)可以部署一些简单的服务。官方给出的应用场景有根据用户 Header 自动修改域名(cn .google.com)、控制对于不同请求的不同 Cloudflare 配置之类的
CloudflareWorkers 每天的前 10 万个请求是免费的,完全够一般使用了,而且部署速度什么的也很快,用在一些简单的服务非常方便
搭建一言服务的话我的思路是用 CloudflarePages 之类的静态托管服务,以 JSON 保存下所有的一言内容。然后 CloudflareWorkers 监听到 HTTP 请求后从 Pages 获取所有的一言内容,解析 JSON 为 JavaScript 对象,随机选择并输出
其实 CloudflareWorkers 还有一个叫 WorkersKV 的东西,可以在 Workers 做永久存储。但考虑到以后想添加一言内容可能不是很方便,还是把所有的一言内容托管到 CloudflarePages 吧
CloudflareWorkers 有一个在线 IDE,操作很方便。以下是代码,只用把新创建 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 addEventListener ("fetch" , (event) ={% note light %} { {% endnote %} event.respondWith ( handleRequest (event.request ).catch ( (err) ={% note light %}new Response (err.stack , { status : 500 }) {% endnote %} ) ); }); /\*\* \* Example someHost is set up to take in a JSON request \* Replace url with the host you wish to send requests to \* @param {string} someHost the host to send the request to \* @param {string} url the URL to send the request to \*/const url = "https://xx.pages.dev/yiyan.json" async function getHitokoto (response ) { const { headers } = response const contentType = headers.get ("content-type" ) "" if (contentType.includes ("application/json" )) { var web=response.text () var json = JSON .parse (await web) return JSON .stringify (json\[Math .floor (Math .random ()\*(json.length -0 +1 )+0 )\]) } }async function handleRequest ( ) { const init = { headers : { "content-type" : "application/json;charset=UTF-8" , }, } const response = await fetch (url, init) const results = await getHitokoto (response) return new Response (results, init) }addEventListener ("fetch" , event ={% note light %} { {% endnote %} return event.respondWith (handleRequest ()) })