类型为“Query”的未知字段“edges”
Unknown field `edges` on type `Query`
我在项目中尝试 运行 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
}
}
}
}
到目前为止一切顺利,但现在我正在尝试构建一个可以使用此查询的 client-side 组件。
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
模式,我会收到此错误。
我缺少什么部分?
我可能来晚了一点,但在我看来,您正试图询问架构根部的边缘,即片段:
const myTreesQuery = graphql`
query componentsMyTreesQuery {
edges {
node {
id
}
}
}
`;
我认为可以修改为:
const myTreesQuery = graphql`
query componentsMyTreesQuery {
myTrees {
edges {
node {
id
}
}
}
}
`;
关键字 query
之后的文本指的是 'query' 的名称,而不是模式的根。如果你正在使用 Relay Modern(通过使用 QueryRenderer,我假设你是)那么编译器应该对你大喊大叫,将你的片段的名称固定为反映它存储在其中的文件名的东西。
我在项目中尝试 运行 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
}
}
}
}
到目前为止一切顺利,但现在我正在尝试构建一个可以使用此查询的 client-side 组件。
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
模式,我会收到此错误。
我缺少什么部分?
我可能来晚了一点,但在我看来,您正试图询问架构根部的边缘,即片段:
const myTreesQuery = graphql`
query componentsMyTreesQuery {
edges {
node {
id
}
}
}
`;
我认为可以修改为:
const myTreesQuery = graphql`
query componentsMyTreesQuery {
myTrees {
edges {
node {
id
}
}
}
}
`;
关键字 query
之后的文本指的是 'query' 的名称,而不是模式的根。如果你正在使用 Relay Modern(通过使用 QueryRenderer,我假设你是)那么编译器应该对你大喊大叫,将你的片段的名称固定为反映它存储在其中的文件名的东西。