Cloudflare 提供每天 10 万次的免费请求额度

如何部署Cloudflare Worker?

  • 首页:https://workers.cloudflare.com
  • 注册,登陆,Start building,取一个子域名,Create a Worker
  • 复制下面代码到左侧代码框,Save and deploy。如果正常,右侧应显示首页。
  • 收藏地址框中的 https://xxxx.子域名.workers.dev,以后可直接访问

    // 定义 Github  信息
    const github_Name = 'Your-Github-UserName'; //Github 用户名
    const github_Repo = 'Your-Github-RepoName'; //Github 仓库名
    const github_base = `${github_Name}/${github_Repo}`;
    
    /* 配置到此结束 */
    
    
    addEventListener('fetch', event => {
      event.respondWith(handleRequest(event.request))
    })
    
    async function bloghandle(request) {
      const urlObj = new URL(request.url);
      const path = urlObj.href.substr(urlObj.origin.length);
      const init = {
          method: "GET"
      };
      var data = '';
      if (path) {
          var url = "https://raw.githubusercontent.com/" + github_base + "/master" + path + '/index.html';
          const response = await fetch(url, init);
          var resptxt = await response.text();
          data += resptxt;
      } else {
          var url = "https://raw.githubusercontent.com/" + github_base + '/master/index.html';
          const response = await fetch(url, init);
          if (response.status == 200) {
              var resptxt = await response.text();
              data += resptxt.replace(/`/g, "\\`");
          } else {
              var url = "https://raw.githubusercontent.com/" + github_base + '/master/404.html';
              const response = await fetch(url, init);
              if (response.status == 200) {
                  var resptxt = await response.text();
                  data += resptxt.replace(/`/g, "\\`");
              } else {
                  data += `404 Page Not Found!`;
              }
          }
      }
      return data;
    }
    
    /**
     * Respond to the request
     * @param {Request} request
     */
    async function handleRequest(request) {
      var resp = new Response(await bloghandle(request), { "Content-type": "text/html;charset=UTF-8", status: 200 });
      resp.headers.set("Content-Type", "text/html");
      return resp;
    }