使用 Cloudflare Workers 实现 Hexo 的随机文章功能
在这篇文章开始前,我必须先提醒你,要实现 Cloudflare Workers 随机文章的功能,你必须要对外提供 API,至少需要包含完整的文章列表;相关需求可以通过 hexo-generator-json-content 或者 hexo-generator-restful 这两个插件实现
Hexo 实现随机文章这种需求,我相信大多数人应该会想到
弄一个页面,然后再用 JavaScript 重新加载到一片随机的文章
怪怪的…要加载两次,不喜欢
如果你是 Cloudflare 的用户,那是真的享福
例如你就可以免费使用 Cloudflare Workers 这种好东西
它也是一种 吾
wang 服务器的计算服务,通过编写一些简单的应用程式的代码就可以无需服务器的随意运行
注意一下免费用户每天有 10 万次请求的限额,不过作为随机文章用途我想怎么用也不可能一天 10 万吧
点开 Cloudflare Dash,随后在 Cloudflare 的 logo 右边的 Menu
按钮中选择 Workers
新建 Workers
,语言用 JavaScript 就好
接下来我会用 fetch 函数来获取这个站的文章列表
1 | return fetch("https://moe.jimmy0w0.me/content.json") |
毕竟它将会是一个 Promise,因此 then 是不可缺少的,除非你使用 async/await 的方式来处理
否则你就给我把 then 加上
1 | .then(res => { |
这些并不是什么 JavaScript 入门教学,上面的代码作用应该就不用赘述了
如果请求的 HTTP 状态码为 200,就继续 return res.json()
的内容,否则就可以抛出错误了
下一个 then
1 | .then(res => { |
好然后建立两个常量:
- posts: 完整的文章列表
- random: 通过 posts 的数组长度,配合 Math 下的 floor 和 random 方法生成出随机数
最后用 posts[random] 的方式实现随机指向 posts 数组中的某一篇文章,通过 Cloudflare Workers 的 Response.redirect
对其进行重定向
注意的是,这里的 statusCode 必须是 302
如果你对 HTTP 状态码有一些概念,我是指,301 和 302 的区别的话
你应该会知道 301 作为永久重定向,请求是可以被缓存的
也就是说如果你的状态码设定为 301,在你清除浏览器缓存之前,你第一次随机文章之后,第二次,第三次进入的文章全都是一模一样的
所以你必须使用 302 来确保每次进去的文章都是不一样的
到此,整个代码应该像是这样的
1 | addEventListener('fetch', event => { |
代码写完之后,保存一下,接下来我们需要把它套用在自己的域名中
不然访问 Cloudflare Workers 的域名的话…
一 点 都 不 优 雅
还是刚才 Cloudflare logo 的右边,点一下 Workers
,在 Domain 处选择自己的域名
进入到某一个域名后,就是我们平常调整 DNS,SSL/TLS 等等之类设置的地方
找到 Workers
选择 Add route
在 route 输入自己的域名和期望别人指定访问哪一个资源会被激活 Workers
例如输入: moe.jimmy0w0.me/random
以后有人访问 https://moe.jimmy0w0.me/random 之后,就会激活 Workers,自动带你来一场刺激的地球转转转旅行,然后再把你丢到我博客的随机一篇文章
下面的 Worker 选择刚才新建好的 Worker 就 vans 了
你学会了吗?学会了还不点赞?
哦…我的博客好像没有这种意义不大的东西…