GraphQLError:预期类型为Int,发现为Int

时间:2019-07-05 21:25:32

标签: apollo-server

在运行带有输入参数(不仅是Ints)的查询时,我遇到了一种新型的荒谬错误(Expected type Int, found Int)。自6月初以来(我升级到graphql@14.3.1以来,它们似乎已经出现了)

我们的设置有所不同,因为我们将远程模式缝合到了本地模式(当它们存在时重叠类型,或者当它们不存在时添加它们)。

有人见过这种类型的错误,知道如何纠正吗?

我已将问题追溯到scalar.js文件的parseLiteral方法。在当前情况下,ast.kind等于EnumValue,而其值是IntValue

var GraphQLInt = new _definition.GraphQLScalarType({
  name: 'Int',
  description: '...',
  serialize: serializeInt,
  parseValue: coerceInt,
  parseLiteral: function parseLiteral(ast) {
    if (ast.kind === _kinds.Kind.INT) {
      var num = parseInt(ast.value, 10);

      if (num <= MAX_INT && num >= MIN_INT) {
        return num;
      }
    }

    return undefined;
  }
});

似乎解析器将10的值任意转换为EnumValue类型的Int而不是IntValue

这是一个典型的查询

combinedStatus(status: "bad", start:10, end:20) {
        status
        timestamp
      }

我收到以下错误:GraphQLError: Expected type Int, found Int.在isValidScalar上。/node_modules/graphql/validation/rules/ValuesOfCorrectType.js:180:27

相同的带有变量的查询将返回预期结果,并且没有错误:

combinedStatus(status: "bad", start:$start, end:$end) {
        status
        timestamp
      }

架构为:

type CdsHealthCheckLocal implements CdsHealthCheckInterface {
    status: String!
    combinedStatus(status: String, start: Int, end: Int): CdsHealthCheck
}

,相应的解析器为:

async (parent, { status, start, end }, context) => { 
        return {
        status: `not sure if I am feeling ${status} (${start}, ${end})`
    }}

0 个答案:

没有答案