【发布时间】:2019-04-19 08:43:06
【问题描述】:
我创建了一个 GraphQL 页面函数。但是,当我尝试重用它时,我得到了错误
架构必须包含唯一的命名类型,但包含多种类型 命名为“页面”
我知道我可以将Page 更改为两个相同的函数,并将它们命名为JobsPage 和PrintsPage。
但是,有没有一种简单的方法可以重复使用它?谢谢
function Page(itemType) {
return new GraphQLObjectType({
name: 'Page',
fields: () => ({
totalCount: { type: GraphQLInt },
edges: { type: new GraphQLList(Edge(itemType)) },
pageInfo: { type: PageInfo }
})
});
}
const PrinterType = new GraphQLObjectType({
name: 'Printer',
fields: () => ({
id: { type: GraphQLString },
jobs: {
type: Page(JobType), // here I use Page first time
args: {
first: {
type: GraphQLInt
},
after: {
type: GraphQLString
}
},
resolve(parentValue, args) {
const { id } = parentValue;
const { first, after } = args;
return getPageJobs({ id, first, after });
}
},
prints: {
type: Page(PrintType), // here I use Page again
args: {
first: {
type: GraphQLInt
},
after: {
type: GraphQLString
}
},
resolve(parentValue, args) {
const { id } = parentValue;
const { first, after } = args;
return getPagePrints({ id, first, after });
}
},
})
});
【问题讨论】:
-
FWIW,如果您的架构包含 Relay 使用的连接或其他功能,那么 Relay 实际上有一个库,其中包含不同的实用程序来在 GraphQL.js 服务器中实现这些功能:github.com/graphql/graphql-relay-js
标签: javascript graphql graphql-js