成功部署后解决 Cloudflare Workers 404 错误

成功部署后解决 Cloudflare Workers 404 错误
成功部署后解决 Cloudflare Workers 404 错误

使用 Cloudflare Worker 排除暂存环境问题

开发过程中的一个重要阶段是设置暂存环境,以便在上线之前可以正确测试更新。在本例中,Cloudflare Workers 使正在开发的主网站保持良好运行。

克隆现有的 Git 存储库并通过 Cloudflare Workers & Pages 将其连接到临时环境后,一切似乎都运行良好。日志表明部署成功,这通常表明已创建实时实例。

但当开发人员尝试访问给定的 Cloudflare 地址时,出现了 404 错误消息,让他不确定出了什么问题。处理这种性质的问题可能会很烦人,特别是当人们认为服务器应该在部署后立即上线时。

目前尚不清楚是否需要第二台服务器,或者是否需要执行其他操作才能完全激活新存储库。我们将在本文中了解此 404 问题的原因以及如何为临时环境正确设置 Cloudflare Workers 服务器。

命令 使用示例
window.onload 一旦页面的所有内容(包括样式表、图片和外部资源)完全加载,就会触发此 JavaScript 事件。它保证只有在页面准备好后才会开始重定向检查。
fetch() 当前浏览器的 API,用于请求网络。在本例中,它使用 Cloudflare 来验证 URL 或资源是否可用。如果请求不成功或返回 404 错误,则可能会启动其他步骤。
response.status 可以使用此属性检查获取请求返回的 HTTP 状态代码。在我们的示例中,它确定答案是否为 404(未找到资源),如果是,则启动个性化重定向。
addEventListener('fetch') 每次工作线程响应网络请求时,此方法都会监视获取事件。我们可以使用它来管理 Cloudflare Workers 中的问题或拦截这些请求并返回个性化答案。
new Response() 生成一个新的 HTTP 响应对象,其中包含标头、自定义正文和自定义状态代码。当无法定位资源时,它用于提供动态回复,例如发送个性化的404页面。
assert.equal() Node.js 断言模块中的此方法比较两个值是否相等。为了确保预期的状态代码 (200、404) 与 Cloudflare Pages 的真实答案匹配,它经常在单元测试中使用。
describe() Node.js 断言模块中的此方法比较两个值是否相等。为了确保预期的状态代码 (200、404) 与 Cloudflare Pages 的真实答案匹配,它经常在单元测试中使用。
event.respondWith() 在 Cloudflare Workers 中用于替换默认提取处理的自定义答案。它允许您修改请求的处理方式,这有助于捕获 404 问题并提供个性化信息。
async function 通过定义异步函数,该关键字允许使用await 处理promise。在这种情况下,它确保脚本推迟执行任何其他逻辑,直到网络请求得到解决。

Cloudflare Worker 和脚本如何处理 404 错误

给定示例中的第一个脚本显示了如何使用 JavaScript 处理前端的 404 错误。该脚本使用 窗口加载 等待页面完全加载的事件。该页面制作了一个 拿来 请求查看资源加载后是否可用。如果资源返回 404 错误,用户将被发送到自定义错误页面。由于不需要后端参与,该技术对于管理用户浏览器中的故障并为任何丢失的页面或资源提供后备特别有用。

在第二个示例中,脚本使用 Cloudflare 工作人员 当它移动到后端时。工人使用 添加事件监听器 方法来侦听事件并在发出获取请求时拦截它们。如果由于请求的页面不存在而发生 404 错误,Worker 将动态提供自定义的错误页面。该策略非常适合管理服务器答案,并提供了一种更具适应性和安全性的错误处理方法,特别是在处理各种上下文(例如生产和登台或动态内容)时。

为了保证前后端脚本的正确部署和运行,第三个示例中引入了单元测试。它执行自动化测试,以查看 Cloudflare Pages 部署是否使用以下命令返回正确的 HTTP 状态代码 Node.js 以及 Mocha 等测试框架。测试套件中包含对主页的测试(假设状态为 200)和对不存在页面的测试(期望状态为 404)。这些测试确保一切都按照计划部署,并且任何损坏的页面或链接都会产生适当的响应。

此外,测试使用 断言 命令保证立即检测到响应状态代码中的任何差异。在持续集成和部署 (CI/CD) 管道中,确保部署行为对于防止停机或连接中断至关重要,因此测试是必不可少的。考虑到所有因素,前端重定向、后端错误处理和单元测试的结合提供了一种彻底的方法来保证 Cloudflare Workers 部署的无缝运行——即使在缺乏资源或定制条件(例如临时服务器)的情况下也是如此。

解决方案 1:使用前端 JavaScript 重定向解决 Cloudflare 404 错误

通过在无法检索所请求的资源时将访问者发送到回退页面,此方法使用 JavaScript 来处理重定向并避免 404 错误。

// Frontend JavaScript for handling redirection
// This script checks if a resource is available on the Cloudflare page
// If not, it redirects to a fallback page
window.onload = function () {
  fetch(window.location.href)
    .then(response => {
      if (response.status === 404) {
        window.location.href = '/404.html';  // Redirect to custom 404 page
      }
    })
    .catch(error => {
      console.error('Error fetching the page:', error);
      window.location.href = '/error.html';  // Redirect to error page
    });
};

解决方案 2:后端 Cloudflare Worker 处理 404 错误

在此解决方案中,404 故障将路由到自定义回退页面,请求由 Cloudflare Workers 处理。对于 Cloudflare 的动态后端处理,此脚本非常完美。

// Cloudflare Worker script for managing 404 errors
// The script checks if the requested path exists, and if not, returns a custom 404 page
addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request));
});
async function handleRequest(request) {
  try {
    const response = await fetch(request);
    if (response.status === 404) {
      return new Response('Custom 404 Page', { status: 404 });
    }
    return response;
  } catch (error) {
    return new Response('Error occurred: ' + error.message, { status: 500 });
  }
}

解决方案 3:Cloudflare 页面的部署检查和单元测试

此方法包括单元测试来验证前端和后端脚本的操作,并验证 Cloudflare Pages 部署是否处于活动状态。

// Example unit test for deployment verification
// Using JavaScript to ensure that Cloudflare Pages return the correct response
const assert = require('assert');
const fetch = require('node-fetch');
describe('Cloudflare Deployment Test', function() {
  it('should return 200 for the main page', async function() {
    const response = await fetch('https://your-domain.pages.dev');
    assert.equal(response.status, 200);
  });
  it('should return 404 for non-existent page', async function() {
    const response = await fetch('https://your-domain.pages.dev/unknown');
    assert.equal(response.status, 404);
  });
});

了解 Cloudflare Workers 暂存环境

出于开发目的,在使用时安装临时环境至关重要 Cloudflare 工人。开发人员可以在将应用程序部署到生产服务器之前在临时环境中测试其应用程序。为了防止出现诸如指示的 404 错误之类的问题,必须在首次设置时正确配置此环境。开发人员经常认为启动实时服务器所需要做的就是克隆 GitHub 存储库并将其连接到 Cloudflare Pages。尽管 Cloudflare 会自动部署静态站点,但如果工作人员的路由配置设置不正确,则可能会出现问题。

404 错误通常意味着请求没有被正确拦截 工人。 Cloudflare Workers 需要自定义路由规则才能保证请求发送到正确的位置。即使在网站启动后,如果未设置这些路由,对某些页面的请求也可能会返回 404 错误。确保 Worker 脚本连接到暂存域也至关重要。通过利用组织良好的 Worker 并验证路线,可以在开发过程中减少这些错误。

使 Worker 仍然连接到您的 暂存域 是另一个关键的步骤。 Worker 在部署期间有时可能无法自动将自身绑定到新环境,特别是当存在多个环境(例如生产和登台)时。要手动将 Worker 连接到特定环境并确保其正确处理请求,开发人员可以利用 Cloudflare 的仪表板。为了使登台和生产环境顺利且无错误地运行,此步骤是必要的。

关于 Cloudflare Workers 和 404 错误的常见问题

  1. 部署 Cloudflare Worker 后导致 404 错误的原因是什么?
  2. 未配置或错误附加路由规则 Worker 域是造成这种情况的常见原因。
  3. page.dev 需要服务器才能运行吗?
  4. 不,不需要服务器。尽管静态站点的部署是由 Cloudflare 自动处理的 pages.dev,确保Worker正确链接。
  5. 如何解决暂存域的 404 错误?
  6. 确保 Worker 脚本配置了所需的路由,并且 Worker 与域相关联。
  7. 是否可以同时使用一个 GitHub 存储库进行生产和暂存?
  8. 是的,但为了防止冲突,您需要建立不同的分支和设置 Workers 独立地针对每个环境。
  9. 工作人员对舞台和制作的处理方式是否不同?
  10. 否,但为了防止部署出现问题,请确保每个 environment 其 Worker 配置正确。

配置 Cloudflare Workers 的关键要点

为了保证 Cloudflare Workers 的正常运行,需要适当地附加到域并仔细设置路由规则。为了防止 404 错误,这些操作对于生产和暂存设置都至关重要。

为了确保成功登台,请务必确认工作线程已正确连接到适当的环境并检查您的部署设置。通过解决这些问题,将减少停机时间并确保无缝部署。

Cloudflare Workers 配置的来源和参考
  1. 详细介绍了如何使用 Cloudflare Workers 进行无服务器应用程序部署以及 404 错误的常见故障排除步骤。检索自 Cloudflare Workers 文档
  2. 提供有关暂存环境以及如何通过 Cloudflare Pages 管理部署的见解。更多详细信息请参见 Cloudflare 页面概述
  3. 讨论将 GitHub 存储库连接到 Cloudflare Workers 以及对动态路由的影响。参考资料取自 GitHub - Cloudflare 存储库