I´m trying to store a UNIX timestamp in MongoDB
using GraphQL
, but it seens that GraphQL has a limit to handle integers. See the mutation below:
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;
}
}
Result:
"errors": [
{
"message": "Int cannot represent non 32-bit signed integer value: 1499484833027",
"locations": [
{
"line": 14,
"column": 5
}
],
"path": [
"addUser",
"creationTimestamp"
]
}
I´m currently using GraphQLInteger
for this field on type definition:
creationTimestamp: {
type: GraphQLInt
}
How can I solve that situation if there is no larger GraphQLInt
available in GraphQL
?
GraphQL doesn't support integers larger than 32 bits as the error indicates. You're better off using a custom scalar like GraphQL Date. There's also a "Long" type available here. Or you could roll your own custom type; there's a great example from Apollo here.
If you're curious why GraphQL does not support anything bigger, you can check out this issue on Github.
⚠️Not recommended...
... but if you want a quick fix (maybe you don't have the time to implement a custom scalar), you can use the Float
type instead of Int
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With