javascriptnode.jsexpressgraphqlexpress-graphql

graphqlHTTP is not a function


Here is my simple 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!");
});

I'm getting the following errors when I run it:

 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

How can I fix it


Solution

  • Look at the documentation:

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

    Note that it uses destructuring equivalent to:

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

    require('express-graphql') returns an object with a property called graphqlHTTP that is the function you want to call.

    You're trying to call the object itself as if it was a function.