无法使用graphql-codegen在使用Rails 6的graphql端点上自动生成TypeScript类型定义

在Rails 5系中,我们可以顺利使用graphql-codegen来自动生成TypeScript的类型定义。然而,当升级到Rails 6后,出现了错误,导致无法自动生成类型定义。因此,我将在此记录解决方法。

开发环境中,使用Docker分别创建了前端和后端容器。

各容器的URL如下:
前端:http://localhost
后端:http://localhost:3001

只需提供一种选项,将以下内容自然地用中文改写:
Rails6新增了一个名为Host Authorization的功能,这就是问题的根本原因。

在后端容器中,我们将主机名backend-api分配给了docker-compose.yml中的后端API。因此,在前端容器中执行graphql-codegen时,它将请求发送到http://backend-api,而不是http://localhost:3001。

# docker-compose exec frontend bash
bash-5.0# yarn graphql-codegen --config codegen.yml
overwrite: true
schema: "http://backend-api/graphql"
documents: "graphql/**/*.graphql"
generates:
  graphql/generated/graphql.ts:
...

在这种情况下,如果不将后端API主机名命名为backend-api并加入白名单,则请求将不被允许。

config.hosts << 'backend-api'

只需在这之后重新启动Rails,并再次执行graphql-codegen,应该就能成功地自动生成TypeScript的类型定义。

简单来说,就是以上内容了。

以下是关于如何解决Rails 6 blocked host错误的参考链接:https://www.fngtps.com/2019/rails6-blocked-host/

广告
将在 10 秒后关闭
bannerAds