为什么赢了';t GraphQL(在Node.js上)调用my";“解决”;方法?
我试图在Node.js中实现一个非常基本的GraphQL接口,但无论我做什么,我似乎都无法触发我的为什么赢了';t GraphQL(在Node.js上)调用my";“解决”;方法?,graphql,graphql-js,Graphql,Graphql Js,我试图在Node.js中实现一个非常基本的GraphQL接口,但无论我做什么,我似乎都无法触发我的foo类型的resolve方法。当我在单元测试中运行以下代码时,它成功地运行了,但是我可以从控制台输出(缺少)中看到,resolve没有被调用,因此当我调用graphql(FooSchema,query)时,我得到了一个空对象 有谁对GraphQL更有经验,能告诉我可能做错了什么吗?如果GraphQL无法找到并调用应该返回结果的方法,那么整个操作如何能够成功完成,我完全感到困惑 const fooT
foo
类型的resolve
方法。当我在单元测试中运行以下代码时,它成功地运行了,但是我可以从控制台输出(缺少)中看到,resolve
没有被调用,因此当我调用graphql(FooSchema,query)
时,我得到了一个空对象
有谁对GraphQL更有经验,能告诉我可能做错了什么吗?如果GraphQL无法找到并调用应该返回结果的方法,那么整个操作如何能够成功完成,我完全感到困惑
const fooType = new GraphQLInterfaceType({
name: `Foo`,
description: `A foo`,
fields: () => ({
id: {
description: `The foo's id`,
type: new GraphQLNonNull(GraphQLInt),
},
title: {
description: `The foo's title`,
type: new GraphQLNonNull(GraphQLString),
}
})
});
const queryType = new GraphQLObjectType({
fields: {
foo: {
args: {
id: {
description: 'ID of the foo',
type: new GraphQLNonNull(GraphQLString)
}
},
resolve: (root, { id }) => {
console.log(12345);
return getFoo(id)
},
type: fooType,
}
},
name: 'Query',
});
export default new GraphQLSchema({
query: queryType,
types: [fooType],
});
// In test:
const query = `
foo {
title
}
`;
const result = graphql(FooSchema, query); // == {}
这是一种接口类型,但是您的使用者queryType
从未实现它。快速解决方案应该是将其更改为:
const fooType = new GraphQLObjectType({
name: `Foo`,
description: `A foo`,
fields: () => ({
id: {
description: `The foo's id`,
type: new GraphQLNonNull(GraphQLInt),
},
title: {
description: `The foo's title`,
type: new GraphQLNonNull(GraphQLString),
}
})
});
下面是一个适合我的例子:
const {
GraphQLNonNull,
GraphQLInt,
GraphQLString,
GraphQLObjectType,
GraphQLSchema,
graphql,
} = require('graphql');
const fooType = new GraphQLObjectType({
name: `Foo`,
description: `A foo`,
fields: () => ({
id: {
description: `The foo's id`,
type: new GraphQLNonNull(GraphQLInt),
},
title: {
description: `The foo's title`,
type: new GraphQLNonNull(GraphQLString),
},
}),
});
const queryType = new GraphQLObjectType({
fields: {
foo: {
args: {
id: {
description: 'ID of the foo',
type: new GraphQLNonNull(GraphQLString),
},
},
resolve: (root, { id }) => {
return { id, title: 'some-title' };
},
type: fooType,
},
},
name: 'Query',
});
const schema = new GraphQLSchema({
query: queryType,
types: [fooType],
});
graphql(schema, `{ foo (id:"123") { id, title } }`).then(console.log.bind(console));
应打印:
$ node test.js
{ data: { foo: { id: 123, title: 'some-title' } } }
以下是InterfaceType上的文档:感谢您的建议:我一直在复制/粘贴《星球大战》示例,我一定没有对复制的内容类型给予足够的关注。但是,将
fooType
更改为一个新的GraphQLObjectType
并不能解决我的问题:我的resolve
仍然没有被调用,而graphql
调用仍然返回一个空对象:(返回getFoo(id)到底做了什么?什么都没有(或者更准确地说,它是不相关的),因为它甚至从未被调用。这是根本问题:如果我能让graphql
调用它(通过resolve
),我就会被设置好。我编辑了我的答案,以便在使用此查询时显示在本地适用的代码:`{foo(id:“123”){id title}我直接复制/粘贴了你的代码,然后运行了我的测试,它就是graphql(FooSchema,'foo(id:'123”){id title})“
…我仍然得到一个空对象。当我修改你的解析
方法来执行控制台。log
时,我看不到日志输出。我完全相信你的代码在你的机器上运行……可能有任何环境因素吗?
$ node test.js
{ data: { foo: { id: 123, title: 'some-title' } } }