`fetch` 在部署到 Vercel 时无法从中间件页面运行
`fetch` does not work from middleware page when deployed to vercel
我在路由上有一个中间件页面,它首先对后端服务器进行检查。
在该中间件中,我尝试使用 fetch
API 调用 next.js api
页面,后者又与后端通信。此流程在本地开发环境中正常运行,但部署到vercel 时却失败了。
vercel中显示的捕获错误是:TypeError: Fetch API cannot load: /api/make-check-at-backend/]
.
使用的URL是相对路径:fetch("/api/make-check-at-backend/", ...)
.
那里有什么问题?我是否需要在托管 next.js 应用程序的地方包含完全限定的 URL 值,包括域、协议等?如果是这样,如何从 Vercel 检索 server/host 名称?我应该使用环境变量吗?
这是中间件中使用的fetch
代码:
const retrievedValue = await fetch("/api/make-check-at-backend/", {
method: "POST",
headers: headers,
body: JSON.stringify({ someKey: 'someValue' }),
});
P.S。我也尝试过使用 axios
直接向后端发出 http 调用,但是由于 axios 适配器已知问题而失败。同样的后端调用在任何 api/*
页面上都按预期工作。这一切都是因为中间件功能仍处于测试阶段吗?
事实证明,Vercel 设置有许多 system environment variables,可在其相应的部署站点中使用。
根据我的经验,在那些已部署的站点中,fetch
API 需要具有完整的 URL,包括协议、主机、路径名等
经过反复试验,我发现在已部署站点中有效的代码是:
const retrievedValue = await fetch(`https://${process.env.VERCEL_URL}/api/make-check-at-backend/`, {
method: "POST",
headers: headers,
body: JSON.stringify({ someKey: 'someValue' }),
});
下面是 Vercel 环境变量文档的屏幕截图,以防上面的 link 随着时间的推移而损坏。
我在路由上有一个中间件页面,它首先对后端服务器进行检查。
在该中间件中,我尝试使用 fetch
API 调用 next.js api
页面,后者又与后端通信。此流程在本地开发环境中正常运行,但部署到vercel 时却失败了。
vercel中显示的捕获错误是:TypeError: Fetch API cannot load: /api/make-check-at-backend/]
.
使用的URL是相对路径:fetch("/api/make-check-at-backend/", ...)
.
那里有什么问题?我是否需要在托管 next.js 应用程序的地方包含完全限定的 URL 值,包括域、协议等?如果是这样,如何从 Vercel 检索 server/host 名称?我应该使用环境变量吗?
这是中间件中使用的fetch
代码:
const retrievedValue = await fetch("/api/make-check-at-backend/", {
method: "POST",
headers: headers,
body: JSON.stringify({ someKey: 'someValue' }),
});
P.S。我也尝试过使用 axios
直接向后端发出 http 调用,但是由于 axios 适配器已知问题而失败。同样的后端调用在任何 api/*
页面上都按预期工作。这一切都是因为中间件功能仍处于测试阶段吗?
事实证明,Vercel 设置有许多 system environment variables,可在其相应的部署站点中使用。
根据我的经验,在那些已部署的站点中,fetch
API 需要具有完整的 URL,包括协议、主机、路径名等
经过反复试验,我发现在已部署站点中有效的代码是:
const retrievedValue = await fetch(`https://${process.env.VERCEL_URL}/api/make-check-at-backend/`, {
method: "POST",
headers: headers,
body: JSON.stringify({ someKey: 'someValue' }),
});
下面是 Vercel 环境变量文档的屏幕截图,以防上面的 link 随着时间的推移而损坏。