通过 public http 路由 returns 请求 Next.js Web 服务在 Digital Ocean App Platform 上出现 404 错误
Requesting Next.js web service through public http route returns 404 error on Digital Ocean App Platform
问题
我正在使用 Strapi 网络服务组件 作为 CMS 和 Next.js 网络服务组件 作为前端。 Strapi 可通过 /api
路线和 /sporus
路线 Next.js 访问。根据 运行time 日志,构建和部署均成功且未显示任何错误。当我尝试通过路由 /sporus
访问我的 Next.js 网络服务时,我遇到了 404 屏幕。 /api
上的 Strapi 正在运行,包括管理面板和请求。
目标
Next.js Web 服务可通过 /sporus
路由访问,而不是 return 404。
我试过的
- 根据 Digital Ocean tutorial video 的两个指南将
npm run start
设置为 next start -H 0.0.0.0 -p ${PORT:-8080}
。
- 根据 Next.js docs
添加 basePath: process.env.BASE_PATH
到 next.config.js
- 检查 Next.js 是否在创建应用程序平台时提供的标准域而不是自定义域上提供服务。
文件
next.config.js
const domains = (process.env.APP_URL) ? [process.env.APP_URL] : ['localhost'];
module.exports = {
reactStrictMode: false,
images: {
domains: domains,
},
basePath: process.env.BASE_PATH,
}
环境变量
应用范围:
- key: STRAPI_URL
scope: RUN_AND_BUILD_TIME
value: ${APP_URL}/api
- key: NEXT_PUBLIC_STRAPI_URL
scope: RUN_AND_BUILD_TIME
value: ${APP_URL}/api
- key: DATABASE_URL
scope: RUN_AND_BUILD_TIME
value: ${db.DATABASE_URL}
- key: APP_URL
scope: RUN_AND_BUILD_TIME
value: ${APP_URL}
下一个具体的:
key: NEXT_URL
scope: RUN_AND_BUILD_TIME
value: ${APP_URL}/sporus
- key: BASE_PATH
scope: RUN_AND_BUILD_TIME
value: /sporus
N.B.
我对 D.G 的经验很少。 App Platform & Next.js 或一般部署 node.js 服务器。我的大部分项目都是在 运行 本地进行的,所以如果这个问题描述性不强,我深表歉意。欢迎所有额外的调试步骤或一般提示。
所以解决方法很简单。这是一个 'double route' 问题。 Digital Oceans 应用程序平台路由到 next.js 网络服务,但 next.js 没有看到此请求。 Next.js 将在路线顶部添加 baseUrl
。我的网络服务在 /sporus/sporus
上可用,而不仅仅是 /sporus
。
通过将 baseUrl
设置回默认值,问题已解决。
问题
我正在使用 Strapi 网络服务组件 作为 CMS 和 Next.js 网络服务组件 作为前端。 Strapi 可通过 /api
路线和 /sporus
路线 Next.js 访问。根据 运行time 日志,构建和部署均成功且未显示任何错误。当我尝试通过路由 /sporus
访问我的 Next.js 网络服务时,我遇到了 404 屏幕。 /api
上的 Strapi 正在运行,包括管理面板和请求。
目标
Next.js Web 服务可通过 /sporus
路由访问,而不是 return 404。
我试过的
- 根据 Digital Ocean tutorial video 的两个指南将
npm run start
设置为next start -H 0.0.0.0 -p ${PORT:-8080}
。 - 根据 Next.js docs 添加
- 检查 Next.js 是否在创建应用程序平台时提供的标准域而不是自定义域上提供服务。
basePath: process.env.BASE_PATH
到 next.config.js
文件
next.config.js
const domains = (process.env.APP_URL) ? [process.env.APP_URL] : ['localhost'];
module.exports = {
reactStrictMode: false,
images: {
domains: domains,
},
basePath: process.env.BASE_PATH,
}
环境变量
应用范围:
- key: STRAPI_URL
scope: RUN_AND_BUILD_TIME
value: ${APP_URL}/api
- key: NEXT_PUBLIC_STRAPI_URL
scope: RUN_AND_BUILD_TIME
value: ${APP_URL}/api
- key: DATABASE_URL
scope: RUN_AND_BUILD_TIME
value: ${db.DATABASE_URL}
- key: APP_URL
scope: RUN_AND_BUILD_TIME
value: ${APP_URL}
下一个具体的:
key: NEXT_URL
scope: RUN_AND_BUILD_TIME
value: ${APP_URL}/sporus
- key: BASE_PATH
scope: RUN_AND_BUILD_TIME
value: /sporus
N.B.
我对 D.G 的经验很少。 App Platform & Next.js 或一般部署 node.js 服务器。我的大部分项目都是在 运行 本地进行的,所以如果这个问题描述性不强,我深表歉意。欢迎所有额外的调试步骤或一般提示。
所以解决方法很简单。这是一个 'double route' 问题。 Digital Oceans 应用程序平台路由到 next.js 网络服务,但 next.js 没有看到此请求。 Next.js 将在路线顶部添加 baseUrl
。我的网络服务在 /sporus/sporus
上可用,而不仅仅是 /sporus
。
通过将 baseUrl
设置回默认值,问题已解决。