74 votes

graphqlHTTP n'est pas une fonction

Voici mon application simple graphql express

const express = require('express');
const graphqlHTTP = require('express-graphql');

const app = express();
app.use(
    '/graphql',
    graphqlHTTP({
      graphiql: true,
    })
  );

app.listen(4000, () => {
    console.log("listening for request!");
});

J'obtiens les erreurs suivantes lorsque je l'exécute :

 graphqlHTTP({
    ^

TypeError: graphqlHTTP is not a function
    at Object.<anonymous> (D:\PersonalProjects\GraphQL\server\app.js:7:5)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)  
    at internal/main/run_main_module.js:17:47

Comment puis-je le réparer ? Merci d'avance !

226voto

Quentin Points 325526

Regardez le documentation :

const { graphqlHTTP } = require('express-graphql');

Notez qu'il utilise une déstructuration équivalente à :

const graphqlHTTP = require('express-graphql').graphqlHTTP;

require('express-graphql') renvoie un objet avec un propriété appelé graphqlHTTP qui est la fonction que vous voulez appeler.

Vous essayez d'appeler l'objet lui-même comme si c'était une fonction.

1 votes

Merci. C'était vraiment utile. J'ai rencontré cette erreur en suivant un tutoriel vidéo GraphQL en 40 minutes daté du 2 mars 2019.

32voto

Huy Points 238

La réponse de Quentin était juste. Apparemment, le documentation npm a été mis à jour mais certains des tutoriels sur YouTube ne l'ont pas été. C'est pourquoi il y a un certain degré de confusion pour les apprenants comme moi. Il existe encore des versions obsolètes du code, telles que

Celui-là : https://github.com/iamshaunjp/graphql-playlist/blob/lesson-36/server/app.js

Celui-là : https://github.com/WebDevSimplified/Learn-GraphQL/blob/master/server.js

Ou celui-là : https://github.com/bradtraversy/customerbase/blob/master/server.js

Ils doivent tous être mis à jour pour

const { graphqlHTTP } = require('express-graphql');

et ensuite

app.use('/graphql', graphqlHTTP({
    schema:schema,
    graphiql:true
}));

9voto

saichandra2896 Points 39

Vous pouvez utiliser

const gqlHTTP = require('express-graphql');

app.use('/graphql', gqlHTTP.graphqlHTTP({
 // something
}))

7voto

Chandana Deshmukh Points 111

Pour que ce soit plus clair :

Avant "express-graphql" retournait une fonction directe ou une classe avec la fonction et nous pouvions l'assigner à n'importe quelle variable comme graphqlServer

const graphqlServer = require('express-graphql');

Maintenant, il retourne l'objet entier qui a une fonction nommée "graphqlHTTP". Le code devrait donc être exactement le suivant

const { graphqlHTTP } = require('express-graphql');

et d'établir une connexion,

app.use('/graphql', graphqlHTTP({
    // your config
}));

6voto

MD SHAYON Points 93

D'abord, vous devez déstructurer

const { graphqlHTTP } = require('express-graphql');

En savoir plus

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X