graphqlHTTP ist keine Funktion

Lesezeit: 3 Minuten

Benutzeravatar von Sachin Titus
Sachin Titus

Hier ist meine einfache graphql express App

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

Ich erhalte die folgenden Fehler, wenn ich es ausführe:

 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

Wie kann ich es reparieren? Danke im Voraus!

Schaue auf die Dokumentation:

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

Beachten Sie, dass es eine Destrukturierung verwendet, die äquivalent ist zu:

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

require('express-graphql') gibt ein zurück Objekt mit einer Eigentum genannt graphqlHTTP das ist die Funktion, die Sie aufrufen möchten.

Sie versuchen, das Objekt selbst so aufzurufen, als wäre es eine Funktion.

  • Vielen Dank. Das war wirklich hilfreich. Ich bin auf diesen Fehler gestoßen, als ich einem 40-minütigen GraphQL-Video-Tutorial vom 2. März 2019 gefolgt bin.

    – Gregor Bologna

    18. Februar 2021 um 1:01 Uhr

Quentins Antwort war genau richtig. Anscheinend die npm-Dokumentation wurde aktualisiert, einige der Tutorials auf YouTube jedoch nicht. Deshalb gibt es für Lernende wie mich ein gewisses Maß an Verwirrung. Es gibt immer noch veraltete Versionen des Codes wie

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

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

Oder dieses: https://github.com/bradtraversy/customerbase/blob/master/server.js

Sie sollten alle aktualisiert werden

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

und dann

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

Benutzeravatar von saichandra2896
saichandra2896

Sie können verwenden

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

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

Benutzeravatar von Chandana Deshmukh
Chandana Deshmukh

Nur um es deutlicher zu machen:

Vorher gab “express-graphql” eine direkte Funktion oder eine Klasse mit der Funktion zurück und wir konnten sie jeder Variablen wie graphqlServer zuweisen

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

Jetzt gibt es das gesamte Objekt zurück, das eine Funktion namens “graphqlHTTP” enthält. daher sollte der Code genau sein

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

und eine Verbindung herzustellen,

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

Dieser Code wurde mit einer früheren Version von geschrieben express-graphql.

Vor v0.10.0Du könntest benutzen

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

Nach v0.10.0müssen Sie verwenden

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

Benutzeravatar von Albert Lee
Albert Lee

Hatte das gleiche Problem durch die obigen Antworten gelöst.

Für alle, die sich fragen, ist die Express-Graphql-Version 0.10.0 der Ort, an dem die relevante Änderung begonnen hat, sodass Sie die Versionsnummer Ihrer Paket.json-Express-Graphql-Abhängigkeit überprüfen können.

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

Benutzeravatar von Larry DaBig Meech
Larry Da Big Meech

Einfache Einrichtung:

VERWENDEN SIE NICHT IHRE EIGENEN PARAMETER. VERWENDEN SIE AUSSCHLIESSLICH {graphqlHTTP}!!!!

Mounten Sie einfach express-graphql als Routenhandler:

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

1434540cookie-checkgraphqlHTTP ist keine Funktion

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy