Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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? Thanks in advance!

like image 236
Sachin Titus Avatar asked Jul 06 '20 17:07

Sachin Titus


2 Answers

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.

like image 154
Quentin Avatar answered Sep 22 '22 15:09

Quentin


Quentin's answer was on spot. Apparently the npm documentation was updated but some of the tutorials on YouTube were not. That's why there's a certain degree of confusion for learners like myself. There are still outdated versions of the code like

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

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

Or this one: https://github.com/bradtraversy/customerbase/blob/master/server.js

They should all be updated to

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

and then

app.use('/graphql', graphqlHTTP({     schema:schema,     graphiql:true })); 
like image 40
Huy Avatar answered Sep 19 '22 15:09

Huy