GraphQL error: Right-hand side of 'instanceof' is not callable
GraphQL error: Right-hand side of 'instanceof' is not callable
我正在定义以下 GraphQL 类型:
interface.js
import {
GraphQLInterfaceType,
GraphQLNonNull,
GraphQLID
} from 'graphql';
const NodeInterface = new GraphQLInterfaceType({
name: 'Node',
fields: {
id: {
type: new GraphQLNonNull(GraphQLID)
}
}
});
export default NodeInterface;
type.js
import {
GraphQLObjectType,
GraphQLInputObjectType,
GraphQLNonNull,
GraphQLID,
GraphQLList,
GraphQLString,
GraphQLInt,
GraphQLBoolean
} from 'graphql';
import NodeInterface from '../interfaces';
import UserModel from '../../models/User';
const fields = {
id: {
type: new GraphQLNonNull(GraphQLID)
},
name: {
type: GraphQLString
},
users: {
type: new GraphQLList(UserType),
resolve(company) {
const { _id } = company;
return UserModel.find({ companyId: _id }).exec();
}
}
};
export const CompanyType = new GraphQLObjectType({
name: 'Company',
description: 'Company',
interfaces: [NodeInterface],
isTypeOf: value => value instanceof CompanyType, <<<< ERROR HERE
fields: fields
})
当 运行 在节点上查询时,我收到以下错误:
query {
node(id:"598360ab8713621aac426e88") {
... on Company {
id
name
}
}
}
结果:
{
"errors": [
{
"message": "Right-hand side of 'instanceof' is not callable",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"node"
]
}
],
"data": {
"node": null
}
}
问题出在 Company
类型的 isTypeOf
处,但我不知道为什么它无法计算创建类型的实例。
每当 GraphQL 解析类型时,它都会传递某种业务对象以供使用。它使用该业务对象来解析类型上的各个字段。您可以将 isTypeOf
方法视为一种检查,以确定传入的业务对象是否应解析为该特定类型。
在您的应用程序中,当您进行查询时,您将从数据库中获取数据并将其传递给类型解析器。您的 isTypeOf
方法需要做的是回答以下问题:此数据是否代表我要解析的类型?
如果您使用的 ORM returns 是 CompanyModel
的一个实例,那么 isTypeOf
方法可以简单地是 value instanceof CompanyModel.
如果您要取回的对象不是从这样的描述性原型继承的,则可以实施任何其他必要的检查。例如,如果您的数据库行包含一个 typename
字段,您可以检查它。
您可以看到 isTypeOf
here 的正确用法。
我正在定义以下 GraphQL 类型:
interface.js
import {
GraphQLInterfaceType,
GraphQLNonNull,
GraphQLID
} from 'graphql';
const NodeInterface = new GraphQLInterfaceType({
name: 'Node',
fields: {
id: {
type: new GraphQLNonNull(GraphQLID)
}
}
});
export default NodeInterface;
type.js
import {
GraphQLObjectType,
GraphQLInputObjectType,
GraphQLNonNull,
GraphQLID,
GraphQLList,
GraphQLString,
GraphQLInt,
GraphQLBoolean
} from 'graphql';
import NodeInterface from '../interfaces';
import UserModel from '../../models/User';
const fields = {
id: {
type: new GraphQLNonNull(GraphQLID)
},
name: {
type: GraphQLString
},
users: {
type: new GraphQLList(UserType),
resolve(company) {
const { _id } = company;
return UserModel.find({ companyId: _id }).exec();
}
}
};
export const CompanyType = new GraphQLObjectType({
name: 'Company',
description: 'Company',
interfaces: [NodeInterface],
isTypeOf: value => value instanceof CompanyType, <<<< ERROR HERE
fields: fields
})
当 运行 在节点上查询时,我收到以下错误:
query {
node(id:"598360ab8713621aac426e88") {
... on Company {
id
name
}
}
}
结果:
{
"errors": [
{
"message": "Right-hand side of 'instanceof' is not callable",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"node"
]
}
],
"data": {
"node": null
}
}
问题出在 Company
类型的 isTypeOf
处,但我不知道为什么它无法计算创建类型的实例。
每当 GraphQL 解析类型时,它都会传递某种业务对象以供使用。它使用该业务对象来解析类型上的各个字段。您可以将 isTypeOf
方法视为一种检查,以确定传入的业务对象是否应解析为该特定类型。
在您的应用程序中,当您进行查询时,您将从数据库中获取数据并将其传递给类型解析器。您的 isTypeOf
方法需要做的是回答以下问题:此数据是否代表我要解析的类型?
如果您使用的 ORM returns 是 CompanyModel
的一个实例,那么 isTypeOf
方法可以简单地是 value instanceof CompanyModel.
如果您要取回的对象不是从这样的描述性原型继承的,则可以实施任何其他必要的检查。例如,如果您的数据库行包含一个 typename
字段,您可以检查它。
您可以看到 isTypeOf
here 的正确用法。