微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

gql 的 Apollo Payload 上的错误未知类型“DateTime”

如何解决gql 的 Apollo Payload 上的错误未知类型“DateTime”

我有很多问题,但这次我的问题是 GraphQL 及其有效负载,我的 schema.gqlresolvers.js 文件如下所示:

    # schema.gql
    scalar GraphQLDateTime
    scalar GraphQLDate
    scalar GraphQLTime
    
    type Query {
      magicQuery(
        idMagic: Int
        magicDate: GraphQLDateTime
      ): damnWow
    }
    
    type damnWow {
      _id: String
      magicDateResult: GraphQLDateTime
    }
    # resolvers.js
    
    const { GraphQLDate,GraphQLTime,GraphQLDateTime } = require('graphql-iso-date');
    
    const resolvers = {
      Query: {
        magicQuery: async (root,{ idMagic,magicDate },context) => {
          // It's never enter here
          console.warn(idMagic,magicDate);
          const result = { _id: 'wow1',magicDate: new Date() };
          return result;
        }
      },GraphQLDateTime: GraphQLDateTime,GraphQLDate: GraphQLDate,GraphQLTime: GraphQLTime
    };
    
    module.exports = resolvers;

当我尝试将我的有效负载用于这样的查询时:

    # query
    query magicQuery($idMagic: Int,$magicDate: DateTime) {
      magicQuery(idMagic: $idMagic,magicDate: $magicDate) {
        _id
        magicDateResult
      }
    }
    
    # variables
    # {
    #   "idMagic": 1,#   "magicDate": "2007-12-03T10:15:30Z"
    # }

它返回一个错误

    {
      "error": {
        "errors": [
          {
            "message": "UnkNown type \"DateTime\".","locations": [
              {
                "line": 1,"column": 45
              }
            ],"extensions": {
              "code": "GRAPHQL_VALIDATION_Failed","exception": {
                "stacktrace": [
                  "GraphQLError: UnkNown type \"DateTime\".","    at Object.NamedType (/home/alex/workspace/team/node_modules/graphql/validation/rules/KNownTypeNamesRule.js:57:29)","    at Object.enter (/home/alex/workspace/team/node_modules/graphql/language/visitor.js:323:29)","    at Object.enter (/home/alex/workspace/team/node_modules/graphql/utilities/TypeInfo.js:370:25)","    at visit (/home/alex/workspace/team/node_modules/graphql/language/visitor.js:243:26)","    at Object.validate (/home/alex/workspace/team/node_modules/graphql/validation/validate.js:69:24)","    at validate (/home/alex/workspace/team/node_modules/apollo-server-core/dist/requestPipeline.js:221:34)","    at Object.<anonymous> (/home/alex/workspace/team/node_modules/apollo-server-core/dist/requestPipeline.js:118:42)","    at Generator.next (<anonymous>)","    at fulfilled (/home/alex/workspace/team/node_modules/apollo-server-core/dist/requestPipeline.js:5:58)"
                ]
              }
            }
          }
        ]
      }
    }

如果我在代码中直接使用相同的参数,它就可以正常工作。

有人知道这个错误的原因吗?

解决方法

您在架构中的标量类型名称是 GraphQLDateTime,但在请求中您使用的是 DateTime
尝试将请求更改为:

query magicQuery($idMagic: Int,$magicDate: GraphQLDateTime) {
  magicQuery(idMagic: $idMagic,magicDate: $magicDate) {
    _id
    magicDateResult
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。