【问题标题】:Unknown field `edges` on type `Query``Query`类型上的未知字段`edges`
【发布时间】:2018-04-15 15:19:02
【问题描述】:

当我尝试在我的项目中运行 relay-compiler 时,我收到了标题中的错误。我正在使用 graphql-python/graphene-django 作为后端 graphql 服务器。这是我的架构的缩写副本。

grove.gql_schema.py:

from graphene_django import DjangoObjectType
from graphene_django.filter import DjangoFilterConnectionField

from .models import Tree

class TreeNode(DjangoObjectType):
    class Meta:
        model = Tree
        filter_fields = ['owner']
        interfaces = (relay.Node,)

class Query(ObjectType):

    def resolve_my_trees(self, info):
        if not info.context.user.is_authenticated:
            return Tree.objects.none()
        else:
            return Tree.objects.filter(owner=info.context.user)
            my_trees = DjangoFilterConnectionField(TreeNode)
            tree = relay.Node.Field(TreeNode)

project.gql_schema:

class Query(grove.gql_schema.Query, graphene.ObjectType):
    pass

schema = graphene.Schema(query=Query)

通过该设置,我可以在 GraphiQL 中成功运行以下查询

query   {
  myTrees {
    edges {
      node {
        id
      }
    }
  }
}

到目前为止一切顺利,但现在我正在尝试构建一个可以使用此查询的客户端组件。

jsapp/components/index.jsx:

import React from 'react';
import {graphql, QueryRenderer} from 'react-relay';

import environment from '../relay_env'

const myTreesQuery = graphql`
  query componentsMyTreesQuery {
    edges {
      node {
        id
      }
    }
  }
`;

export default class App extends React.Component {
  render() {
    return (
      <QueryRenderer
        environment={environment}
        query={myTreesQuery}
        variables={{}}
        render={({error, props}) => {
          if (error) {
            return <div>Error!</div>;
          }
          if (!props) {
            return <div>Loading...</div>;
          }
          return <div>User ID: {props.edges}</div>;
        }}
      />
    );
  }
}

查询是相同的,但是当我运行relay-compiler --src ./jsapp --schema ./schema.graphql --extensions js jsx 时出现错误:

GraphQLParser: Unknown field `edges` on type `Query`.
Source: document `componentsMyTreesQuery` file: `components/index.jsx`.

如果我使用 Django graphaql_schema 管理命令生成的 .json 架构或 get-graphql-schema 检索到的 .graphql 架构时,我会收到此错误。

我错过了什么?

【问题讨论】:

    标签: django relayjs graphene-python


    【解决方案1】:

    我可能有点晚了,但在我看来,您正在尝试询问架构根的边缘,即片段:

    const myTreesQuery = graphql`
      query componentsMyTreesQuery {
        edges {
          node {
            id
          }
        }
      }
    `;
    

    我认为可以改成:

    const myTreesQuery = graphql`
      query componentsMyTreesQuery {
        myTrees {
          edges {
            node {
              id
            }
          }
        }
      }
    `;
    

    关键字query 后面的文本是指“查询”的名称,而不是模式的根。如果您使用的是 Relay Modern(我假设您使用的是 QueryRenderer),那么编译器应该对您大喊大叫,将您的片段名称修复为反映其存储的文件名的名称。

    【讨论】:

    • 就是这样!你没有迟到,感谢您花时间写下这个答案!编译器 /was/ 一直在抱怨这个名字,直到我把这一切弄清楚了,在你的暗示下,我实际上已经让编译器退出了 barfing。再次感谢!
    猜你喜欢
    • 2020-05-18
    • 2016-03-13
    • 2020-11-27
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 2019-03-28
    相关资源
    最近更新 更多