我正在开发一个 Nuxt 3 应用程序,主要是静态内容,但我有一个与 Pipedrive CRM 交互的表单提交。在开发过程中(
npx nuxi dev
),一切都很完美。当我尝试使用 nuxt generate
静态生成网站时,问题就出现了。
具体内容如下:
我有一个表单组件,在提交后,它会从可组合项 (~/composables/pipedrive.ts) 调用函数
sendPipedriveLead
。
可组合项中的函数对路由进行await $fetch 调用
/api/createLead
。
此路由的服务器端逻辑位于
~/server/api/createLead
中。这遵循 Nuxt 的新目录结构,可以使用 ~/server/api
中的文件创建服务器端路由。在该路由/文件中,我们完成其余的操作,包括另一个 $fetch 到 Pipedrive 的 API URL。
在开发模式下运行时,我可以看到服务器正确处理该路由。一切都在那里完美地运作。然而,在运行
npx nuxi generate --dotenv .env.local
然后 npx serve .output/public
(基本上是 nuxt generate
)并提供静态文件 (npx serve .output/public
) 后,我在提交并尝试 /api/createLead
路线时收到 404 错误。
错误如下:
HTTP 10/5/2023 3:33:20 PM ::1 POST /api/createLead
HTTP 10/5/2023 3:33:20 PM ::1 Returned 404 in 1 ms
根据我的理解,
~/server/api
目录用于基于服务器的路由,仅当有活动服务器运行时才能访问。鉴于 nuxt generate
生成一个没有活动服务器的完全静态站点,似乎这些路由在生成后无法访问。是这样吗?
如何维护表单提交的服务器端路由功能,同时仍然利用
nuxt generate
为网站的其余部分带来的性能优势? Nuxt 3 中是否有推荐的方法来处理这种情况?
我遇到了类似的问题,但对于共享主机,它不起作用,如果您使用共享主机并且不需要修复反向代理或 .htaccess 文件。所以我将该项目移至 VPS 那里提供服务。
如果您需要访问公用文件夹内容,这也会失败。当详细讨论这个问题时,我将与您分享 discord 线程,我使用 api 路由解决了它。