长期以来我的网页一直有一个问题:发了最新的文章不会第一时间显示,必须要刷新一次。这是因为我开了Cloudflare的CDN缓存,设了8天。

当然可以简单地把缓存时间改得特别短,但是这一点也不优雅在我长期不发文章的日子里这又会让网页加载变慢;每次发完文章都去Cloudflare dashboard清除一次缓存也能解决问题,但是这一点也不优雅 这太麻烦了我是懒鬼总之这个方案也否决了。

查看Cloudflare上关于缓存的配置项,发现底下有个API可以用,于是指示AI帮我写脚本。

在hexo目录下的scripts中创建events.js,写入:

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
var exec = require('child_process').exec;

hexo.on('deployAfter', function() {
const https = require('https');
const ZONE_ID = '<信息脱敏>';
const API_TOKEN = '<信息脱敏>';

// 配置请求选项
const options = {
hostname: 'api.cloudflare.com',
path: `/client/v4/zones/${ZONE_ID}/purge_cache`,
method: 'POST',
headers: {
'Authorization': `Bearer ${API_TOKEN}`,
'Content-Type': 'application/json',
},
};

// 发送清除缓存的请求,purge_everything 会清除该域名下所有缓存
const request = https.request(options, (response) => {
let data = '';
response.on('data', (chunk) => { data += chunk; });
response.on('end', () => {
if (response.statusCode === 200) {
console.log('Cloudflare 缓存已成功清除!');
} else {
console.error(`CloudFlare Cache Purge Failed!\n (${response.statusCode}):`, data);
}
});
});

request.on('error', (error) => {
console.error('API 请求失败:', error);
});

// 发送请求体,使用 'purge_everything' 清除全部缓存,也可以指定单个文件
request.write(JSON.stringify({ purge_everything: true }));
request.end();
});

这里的ZONE_ID就是Cloudflare缓存API配置项那里显示给你的链接中看起来最random的那一段,而API_TOKEN则可以自己去Cloudflare账户配置页面创建一个。hexo.on('deployAfter', function(){});可以在deploy之后自动调用function函数,实现自动化脚本操作。