GraphQL大整数错误:Int不能表示非32位有符号整数值

时间:2017-07-08 03:45:08

标签: javascript mongodb mongoose graphql

我正在尝试使用MongoDBGraphQL中存储UNIX时间戳,但它认为GraphQL有一个限制来处理整数。请参阅以下突变:

const addUser = {
    type: UserType,
    description: 'Add an user',
    args: {
        data: {
            name: 'data',
            type: new GraphQLNonNull(CompanyInputType)
        }
    },
    resolve(root, params) {

        params.data.creationTimestamp = Date.now();

        const model = new UserModel(params.data);
        const saved = model.save();

        if (!saved)
            throw new Error('Error adding user');

        return saved;
    }
}

结果:

  "errors": [
    {
      "message": "Int cannot represent non 32-bit signed integer value: 1499484833027",
      "locations": [
        {
          "line": 14,
          "column": 5
        }
      ],
      "path": [
        "addUser",
        "creationTimestamp"
      ]
    }

我目前在类型定义的字段上使用GraphQLInteger

creationTimestamp: { 
    type: GraphQLInt
}

如果GraphQLInt中没有更大的GraphQL可用,我该如何解决这种情况?

2 个答案:

答案 0 :(得分:7)

您最好使用GraphQL Date之类的自定义标量。还有一个“长”类型可用here。或者你可以推出自己的自定义类型;阿波罗here就是一个很好的例子。

如果您很好奇为什么GraphQL不支持更大的内容,您可以查看this issue on Github

答案 1 :(得分:0)

⚠️不推荐...

...但是如果您想要快速修复(可能您没有时间实现自定义标量),您可以使用 Float 类型而不是 Int