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

lmyy7pcs  于 2023-01-29  发布在  Java
关注(0)|答案(2)|浏览(191)

我尝试使用GraphQLMongoDB中存储一个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
}

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

cclgggtu

cclgggtu1#

GraphQL不支持大于32位的整数,如错误所示。你最好使用一个自定义标量,如GraphQL Datehere也有一个“Long”类型可用。或者你可以滚动你自己的自定义类型;这是阿波罗计划的一个很好的例子。
如果你想知道为什么GraphQL不支持更大的东西,你可以看看this issue on Github

nnt7mjpx

nnt7mjpx2#

️不建议使用,因为可能会损失精度...

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

相关问题