AI摘要:文章介绍了如何通过编写hexo脚本自动刷新Cloudflare缓存,解决发布新文章后需手动刷新才能显示的问题。脚本利用Cloudflare API在部署后自动清除缓存,避免了频繁修改缓存时间或手动操作的麻烦。

Powered by Paimom - 派蒙.

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

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

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

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

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',
    },
  };

  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);
  });

  request.write(JSON.stringify({ purge_everything: true }));
  request.end();
});

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