【问题标题】:GraphQL error: Right-hand side of 'instanceof' is not callableGraphQL 错误:“instanceof”的右侧不可调用
【发布时间】:2018-01-11 12:32:24
【问题描述】:

我正在定义以下 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,但我不知道为什么它无法评估创建类型的实例。

【问题讨论】:

    标签: javascript graphql instanceof graphql-js


    【解决方案1】:

    每当 GraphQL 解析一个类型时,它都会传递某种类型的业务对象来处理。它使用该业务对象来解析类型上的相应字段。您可以将isTypeOf 方法视为一种检查,以确定传入的业务对象是否应解析为此特定类型。

    在您的应用程序中,当您进行查询时,您会从数据库中获取数据并将其传递给类型解析器。您的isTypeOf 方法需要做的是回答这个问题:这些数据是否代表我要解决的类型?

    如果您使用的 ORM 返回一个实例,例如 CompanyModel,则 isTypeOf 方法可以简单地为 value instanceof CompanyModel.

    如果您返回的对象不是从这样的描述性原型继承的,您可以实施任何其他必要的检查。例如,如果您的 db 行包含一个 typename 字段,您可以对其进行检查。

    您可以看到isTypeOf here 的正确用法。

    【讨论】:

      猜你喜欢
      • 2017-09-16
      • 2017-01-18
      • 2019-09-17
      • 1970-01-01
      • 2017-08-28
      • 2023-02-14
      • 1970-01-01
      • 2020-04-05
      • 2023-01-31
      相关资源
      最近更新 更多