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');