作业提交页面设计

好的,现在请你总结一下我们整个的安装设计部署过程。我希望包括:1、安装过程中可能出错以及遇到的问题和最终的解决办法;2、设计开发过程中可能出错的地方,以及遇到的问题和最终的解决方案;3、测试部署过程中可能出错的地方,以及遇到的问题和最终的解决方案。尽可能的详细,便于将来回顾。 

很高兴为你总结我们这次从头到尾的合作过程。这个总结将涵盖你在各个阶段可能遇到的问题、原因以及我们最终找到的解决方案。


1. 安装阶段:环境与依赖

这个阶段的主要挑战是让你的 VPS 环境准备好运行 npm 和 wrangler,并成功安装项目依赖。

  • 问题 1:npm install 失败并显示 Killed
    • 原因: 你的 VPS 内存或 CPU 资源不足,操作系统启动了 OOM Killer 机制,强制终止了 npm install 进程。
    • 解决方案增加 VPS 的 Swap 空间。我们通过创建和激活一个 Swap 文件,为系统提供了额外的虚拟内存,从而成功地让 npm install 顺利完成。
  • 问题 2:npm install 出现警告和漏洞提示
    • 原因: 依赖库本身存在已过时的版本或已知的安全漏洞。
    • 解决方案忽略或选择性修复。对于你的项目而言,这些警告和漏洞不会影响 Worker 的功能。最直接的方案是忽略它们,继续进行部署。如果需要修复,可以通过 npm audit fix 命令,但可能引入不兼容的变更。
  • 问题 3:npm install exceljs 失败
    • 原因exceljs 依赖于一些旧版本的 peer dependencies,可能导致安装失败。
    • 解决方案: 使用 npm install exceljs --legacy-peer-deps 命令。这个标志会告诉 npm 忽略依赖版本冲突,从而强制完成安装。

2. 设计开发阶段:代码与配置

这个阶段的重点是配置 wrangler.jsonc 文件,并确保你的代码与它协同工作。

  • 问题 1:wrangler.jsonc 配置错误
    • 原因wrangler 配置格式有严格要求,常见的错误是字段不匹配。例如,zone_id 应该是一个 ID 字符串而不是域名,routes 对象中的 rewrite 和 route_name 等字段与字符串模式不兼容,custom_domain 不能与路径一起使用。
    • 解决方案严格遵循 wrangler 文档和错误提示。最终我们找到了一个简洁的、仅包含模式字符串的 routes 配置,它能被 wrangler 正确解析。
  • 问题 2:代码中 URL 路径与路由不匹配
    • 原因: 你在 wrangler.jsonc 中配置了子路径 (/assign-sub/*),但你的 Worker 代码期望 //upload等根路径。
    • 解决方案在 Worker 代码中处理 URL 重写。我们使用了 let pathname = url.pathname.replace(/^\/assign-sub(\/?)/, '/'); 语句,在代码中将 assign-sub 子路径移除,确保你的 switch 语句能正确处理重写后的路径。
  • 问题 3:HTML 表单路径问题
    • 原因: HTML 表单 action 属性的相对路径解析行为与预期不同,导致表单被提交到错误的 URL。例如,./submit-password 被浏览器解析为 https://wintendo.cloudns.biz/submit-password,而不是 https://wintendo.cloudns.biz/assign-sub/submit-password
    • 解决方案使用 assign-sub/submit-password 这种相对路径。这种路径的解析方式能确保 URL 中包含 assign-sub 前缀,从而被 wrangler 的路由正确捕获。

3. 测试与部署阶段:验证与上线

这个阶段的挑战是将本地开发环境与线上生产环境进行同步,并验证其功能。

  • 问题 1:wrangler dev 本地测试时,文件无法上传到 R2
    • 原因wrangler dev 默认在本地模拟 R2 服务,并不会连接到你的线上 R2 Bucket。
    • 解决方案直接部署到生产环境。本地测试用于验证代码逻辑,线上部署才能验证与 Cloudflare 服务的实际交互。
  • 问题 2:部署成功但 Worker URL 消失
    • 原因: 在 wrangler.jsonc 中添加了 "workers_dev": false,明确告诉 wrangler 不再为你的 Worker 创建免费的 workers.dev 子域名。
    • 解决方案在 Cloudflare Dashboard 中手动添加自定义域名路由。通过配置路由,你将 Worker 挂载到自己的域名上,而不是依赖于 workers.dev
  • 问题 3:wrangler.jsonc 和 Cloudflare Dashboard 的路由不一致
    • 原因: 我们在本地配置了 routes,但在 Cloudflare 上却没有相应的路由。
    • 解决方案以 wrangler.jsonc 为唯一真理来源。将 routes 配置写在 wrangler.jsonc 中,然后通过 wrangler deploy 命令自动同步到 Cloudflare Dashboard,无需手动添加。

最终的结论

你通过这次实践,不仅成功地部署了一个复杂的 Worker 应用,还深入理解了 Cloudflare 开发工作流中的核心问题。你所遇到的每一个问题,都是一个学习的机会,让你更好地掌握了 npmwrangler 和 Cloudflare 的配置精髓。

1、前面submit-password和upload两个route路径如何设置应该重点说明;2、通过引入隧道方式,可以方便的实现在headless上的vps能够进行localhost方式的调试; 

这两个方面的内容进一步补充 

关于路径和隧道:最终总结与补充


1. 路径和路由的重点说明

在整个调试过程中,路径和路由是最大的难点。以下是最终确定的、最可靠的路径设置方案,也是我们之前所讨论的,但这次我将它总结得更加清晰。

你的 Worker 代码中的路径

在你的 index.ts 文件中,所有内部路由都应该被视为根路径。这是因为你的 Worker 代码会负责处理 URL 重写,将外部的复杂路径转换为内部的简单路径。

  • 你的 switch 语句应该处理的路径
    • / (用于显示密码输入页面)
    • /submit-password (用于处理密码提交)
    • /upload (用于处理文件上传)

你的 HTML 中的路径

这是最容易出错的地方。HTML 表单和链接的路径必须确保浏览器将请求正确发送到你的 Worker。

  • 表单 action 的路径
    • 正确写法action="assign-sub/submit-password"
    • 为什么:这种相对路径写法,在浏览器看来,是基于 https://wintendo.cloudns.biz 这个域名的根目录来解析。这确保了表单提交的 URL 总是 https://wintendo.cloudns.biz/assign-sub/submit-password,从而被 Cloudflare 正确路由到你的 Worker。
  • fetch API 的路径
    • 正确写法fetch('./upload')
    • 为什么fetch API 的 ./ 前缀是相对于当前页面 URL 来解析的。当页面 URL 是 https://wintendo.cloudns.biz/assign-sub 时,./upload 会被正确解析为 https://wintendo.cloudns.biz/assign-sub/upload

wrangler.jsonc 中的路由

你的本地配置文件只需要声明 Cloudflare 需要监听哪些模式的 URL,以确保它们能够被路由到你的 Worker。

  • 正确配置:JSON"routes": [ "wintendo.cloudns.biz/assign-sub/*", "wintendo.cloudns.biz/assign-sub" ]
  • 为什么:这个配置告诉 Wrangler,将所有以 assign-sub 开头的请求(包括带斜杠和不带斜杠的)都发送给你的 Worker。

2. 关于 SSH 隧道:本地测试的利器

你使用 SSH 隧道来解决在无头 VPS 上进行本地调试的问题,这是一个非常实用的技巧,值得重点强调。

如何工作

SSH 隧道本质上是创建了一个加密的通道,将本地机器上的端口转发到远程服务器(你的 VPS)上的端口。

  1. 在 VPS 上:你运行 wrangler dev,它启动一个本地 Web 服务器,监听 localhost:8787。这个服务器只能被 VPS 内部访问。
  2. 在你的电脑上:你运行 ssh -L 8787:localhost:8787 ...。这个命令创建了一个隧道,告诉你的电脑:“任何发送到我本地 8787 端口的请求,都通过 SSH 隧道转发到 VPS 的 localhost:8787。”
  3. 在浏览器中:当你访问 http://localhost:8787 时,浏览器将请求发送给你的本地电脑。你的电脑通过 SSH 隧道,将请求秘密地发送到你的 VPS,由 wrangler dev 服务来处理。

为什么要这样做

  • 无需部署即可测试:它允许你在代码更改后立即测试,无需等待 wrangler deploy 的过程,极大地提高了开发效率。
  • 模拟生产环境:你可以在一个与生产环境(Linux VPS)相似的环境中测试,减少因操作系统差异而产生的问题。
  • 绕过网络限制:由于整个过程是通过 SSH 隧道进行的,即使 VPS 的防火墙阻止了外部对 8787 端口的访问,你也可以安全地进行本地调试。

通过这种方式,你成功地克服了无头 VPS 的局限性,实现了高效、安全的本地开发工作流。

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top