0

当我尝试使用 Rails 6 加载 graphiql 客户端时,我在加载时收到此错误,特别是想要使用文档资源管理器。

TypeError: Cannot read property 'types' of undefined
at buildClientSchema (http://localhost:3000/assets/graphiql/rails/application-6f03c7a92432765b0fbe671bfb7a292ee6c37e6704b6e6ac95587e45676bbf72.js:34102:72)
at http://localhost:3000/assets/graphiql/rails/application-6f03c7a92432765b0fbe671bfb7a292ee6c37e6704b6e6ac95587e45676bbf72.js:2795:55

我尝试删除我的 graphql 目录并重新执行 rails generate graphql:install。

我在用

  • 导轨 6
  • graphiql-rails (1.7.0)
  • graphql (1.10.5)

我最初仅将其构建为 API(并删除了不必要的文件,包括资产),但随后添加了必要的配置以在本地开发中运行 graphiql,包括添加一个 app/assets/config/manifest.js

//= link_tree ../images
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css

我能够对其进行更多研究 - 我在 chrome 调试器中为第 34,102 行设置了一个断点,该断点具有以下代码:

function buildClientSchema(introspection, options) {
  // Get the schema from the introspection result.
  var schemaIntrospection = introspection.__schema;

  // Converts the list of types into a keyMap based on the type names.
  var typeIntrospectionMap = (0, _keyMap2.default)(schemaIntrospection.types, function (type) {
    return type.name;
  });
..... more code ......

问题在于schemaIntrospection.types,schemaIntrospection是未定义的。所以在上面,我检查了调用introspection.__schema的自省变量 - 自省变量看起来像:

{"Schema":
    {"queryType": {"name":"Query"},
     "mutationType": {"name":"Mutation"},
     "subscriptionType":null,
.... more JSON ...

所以,我最终做的不是拥有var schemaIntrospection = introspection.__schema;,而是使用正确的键设置schemaIntrospection变量:

var schemaIntrospection = introspection.Schema;

它奏效了!仅针对该特定调用:/,因为我使用了交互式调试器

有谁知道如何更永久地使用 ruby​​-graphql/graphiql 解决这个问题?

我希望能够使用文档资源管理器

谢谢!

4

1 回答 1

0

回过头来看,我正在从基于 REST 的 API 迁移到 Graphql。我的旧项目有一个我忘记禁用的中间件(https://github.com/vigetlabs/olive_branch),所以这导致它自动将蛇盒(它识别__schema为蛇盒)更改为 CamelCase。我对此不好,但想跟进以防其他人有问题,也许检查你的中间件。

于 2020-04-02T04:20:44.030 回答