27
votes

graphqlHTTP n'est pas une fonction

Voici mon application express graphql simple

 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

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

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!");
});

Comment puis-je y remédier? Merci d'avance!


0 commentaires

7 Réponses :


79
votes

Regardez la documentation :

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

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

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

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

Vous essayez d'appeler l'objet lui-même comme s'il s'agissait d'une fonction.


0 commentaires

16
votes

La réponse de Quentin était sur place. Apparemment, la documentation npm a été mise à jour, mais certains des didacticiels 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 comme

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

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

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

Ils devraient tous être mis à jour pour

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

puis

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


0 commentaires

3
votes

Le même problème a-t-il été résolu par les réponses ci-dessus.

Pour ceux qui se demandent, express-graphql version 0.10.0 est l'endroit où le changement pertinent a commencé afin que vous puissiez vérifier le numéro de version de votre dépendance package.json express-graphql.

https://www.npmjs.com/package/express-graphql/v/0.9.0
https://www.npmjs.com/package/express-graphql/v/0.10.0


0 commentaires

2
votes

Vous pouvez utiliser

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


0 commentaires

3
votes

Juste pour être 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 renvoie l'objet entier qui a une fonction à l'intérieur nommée "graphqlHTTP". donc le code doit être exactement

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

et pour établir une connexion,

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


0 commentaires

0
votes

Configuration simple :

N'UTILISEZ PAS VOTRE PROPRE PARAMÈTRE UTILISEZ STRICTEMENT {graphqlHTTP} !!!!

Montez simplement express-graphql comme gestionnaire d'itinéraire:

const express = require('express');
const { graphqlHTTP } = require('express-graphql');
 
const app = express();
 
app.use(
  '/graphql',
  graphqlHTTP({
    schema: MyGraphQLSchema,
    graphiql: true,
  }),
);
 
app.listen(4000, () => {
    console.log('Server is running on port 4K')
);


0 commentaires

0
votes

Au début, vous avez besoin d'une déstructure

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

Apprendre encore plus


0 commentaires