Nextjs api“pages/api”在 vercel 服务器上不起作用

lua*_*ias 5 rest reactjs next.js serverless vercel

大家好,你可以帮助我吗?

\n

我正在尝试配置我的假 API 来创建一些个人项目,但就我而言,使用/pages/api文件夹的方法仅适用于本地主机中的我,当我部署到 Vercel 上的服务器时,项目无法找到我的终点。

\n

就我而言,我使用 src/ 文件夹方法来开发我的应用程序,我不知道这种结构是否会导致 api 文件夹出现问题。

\n

我尝试和工作的一件事是使用应用程序根目录下的 api 文件夹(在 /src 文件夹之外)部署到 vercel,但 api 在本地主机上停止工作。

\n

此结构适用于本地主机,但不适用于服务器:

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80public/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80src/\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80api/\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80pages/\n    ...\nnext.config.js\npackage.json\n
Run Code Online (Sandbox Code Playgroud)\n

此结构适用于服务器,但不适用于本地主机:

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80api/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80public/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80src/\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80pages/\n    ...\nnext.config.js\npackage.json\n
Run Code Online (Sandbox Code Playgroud)\n

这是我用来获取数据的方法:

\n

AXIOS API:

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80public/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80src/\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80api/\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80pages/\n    ...\nnext.config.js\npackage.json\n
Run Code Online (Sandbox Code Playgroud)\n

驻波比挂钩:

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80api/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80public/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80src/\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80pages/\n    ...\nnext.config.js\npackage.json\n
Run Code Online (Sandbox Code Playgroud)\n

驻波比回调:

\n
import axios from \'axios\'\n\nconst api = axios.create({\n  baseURL: \'/api/\'\n})\n\nexport default api\n
Run Code Online (Sandbox Code Playgroud)\n

我希望我能解释一下,我的问题是如何使用此功能的最佳方式,因为 /src 文件夹通常与 nextjs 一起使用,但我不知道这是否是 api 文件夹的真正问题。

\n

谢谢!

\n

小智 6

不能 100% 确定这是否是同一个问题。我在构建阶段收到此警告:

warn  - Statically exporting a Next.js application via `next export` disables API routes. This command is meant for static-only hosts, and is not necessary to make your application static.
Run Code Online (Sandbox Code Playgroud)

确保您在输出package.json脚本中使用正确的构建命令。

我就是我的情况:

"next build && next export"需要改为"build": "next build"

注:我删除了&& next export

pages/api这禁用了静态导出功能,并允许在运行时使用yarn startnote:yarn start 依赖于 Vercel 构建管道中的构建脚本。因此,除非需要,否则不要覆盖默认设置。

另外,在普通的 Node/JS 项目中,您可以在脚本区域中定义源文件夹,即"start": "<SOME_COMMAND> ./src"....但 Next.js 会自动执行此操作,因此我认为src文件不是问题。我的项目中也有一个src文件,这是组织 JS 项目的一种非常常见的方式(首选方式)。如果您正在使用 next,则不必触摸它。