我尝试使用GraphQL
在MongoDB
中存储一个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
可用,我如何解决这种情况?
2条答案
按热度按时间cclgggtu1#
GraphQL不支持大于32位的整数,如错误所示。你最好使用一个自定义标量,如GraphQL Date。here也有一个“Long”类型可用。或者你可以滚动你自己的自定义类型;这是阿波罗计划的一个很好的例子。
如果你想知道为什么GraphQL不支持更大的东西,你可以看看this issue on Github。
nnt7mjpx2#
️不建议使用,因为可能会损失精度...
...但是如果您想要快速修复(也许您没有时间实现自定义标量),可以使用
Float
类型而不是Int
。