Netlify部署应用后仅/graphql路径抛出404错误问题求助
问题核心原因
Heroku属于全栈应用托管平台,会常驻运行项目内的Node.js服务端进程,因此代码中配置的/graphql后端路由可以正常响应请求。但Netlify默认是静态资源托管平台,不会自动启动项目内的Node服务端进程,所有未匹配到静态资源的路径都会直接走静态资源查找逻辑,自然无法命中/graphql对应的服务,直接返回404错误。
可行修复方案
- 方案1:通过Netlify Functions托管GraphQL服务
将原本写在Express、Apollo Server中的GraphQL接口改造成Netlify无服务器函数,随后在项目根目录新建netlify.toml配置文件,添加路由重写规则,将所有/graphql的请求转发到对应函数地址:
如果使用Apollo Server搭建的GraphQL服务,官方已经提供了适配Netlify Functions的专用依赖包,按照官方文档改造服务入口即可,不需要重写已有的GraphQL业务逻辑。[[redirects]] from = "/graphql" to = "/.netlify/functions/你的graphql函数文件名" status = 200 force = true - 方案2:保留独立后端,配置代理转发规则
如果不想改动现有后端代码,可以将GraphQL后端单独部署在支持常驻服务的平台(比如已经跑通部署流程的Heroku),随后在netlify.toml中配置代理规则,将/graphql路径的所有请求转发到已部署的后端服务地址:
注意要在后端配置中添加Netlify对应域名的跨域许可,避免前端请求被浏览器跨域策略拦截。[[redirects]] from = "/graphql" to = "你部署在其他平台的后端服务地址/graphql" status = 200 force = true - 方案3:开启Netlify全栈框架适配
如果项目基于Next.js、Remix这类全栈框架开发,部署时直接开启Netlify对应框架的官方适配插件即可,平台会自动托管框架的服务端路由、API接口,不需要手动编写重写规则,/graphql路由会和Heroku部署时一样正常响应。
内容的提问来源于stack exchange,提问作者Chance
相关产品推荐
相关产品推荐

