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!
7 Réponses :
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.
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');
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
Vous pouvez utiliser
app.use('/graphql', graphqlHTTp.graphqlHTTP({ // something }))
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 }));
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') );
Au début, vous avez besoin d'une déstructure
const { graphqlHTTP } = require('express-graphql');