web-dev-qa-db-fra.com

Erreur de grand entier GraphQL: Int ne peut pas représenter une valeur entière signée non 32 bits

J'essaie de stocker un horodatage UNIX dans MongoDB en utilisant GraphQL, mais il semble que GraphQL a une limite pour gérer les entiers. Voir la mutation ci-dessous:

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;
    }
}

Résultat:

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

J'utilise actuellement GraphQLInteger pour ce champ sur la définition de type:

creationTimestamp: { 
    type: GraphQLInt
}

Comment puis-je résoudre cette situation s'il n'y a pas de GraphQLInt plus grand disponible dans GraphQL?

10
Mendes

Vous feriez probablement mieux d'utiliser un scalaire personnalisé comme Date GraphQL . Il existe également un type "Long" ici . Ou vous pouvez rouler votre propre type personnalisé; il y a un excellent exemple d'Apollo ici .

Si vous êtes curieux de savoir pourquoi GraphQL ne supporte rien de plus gros, vous pouvez vérifier ce problème sur Github .

12
Daniel Rearden