graphqlHTTP 不是函数

Sac*_*tus 48 javascript node.js express graphql express-graphql

这是我的简单 graphql express 应用程序

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!");
});
Run Code Online (Sandbox Code Playgroud)

我在运行时遇到以下错误:

 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
Run Code Online (Sandbox Code Playgroud)

我该如何解决?提前致谢!

Que*_*tin 154

查看文档

const { graphqlHTTP } = require('express-graphql');
Run Code Online (Sandbox Code Playgroud)

请注意,它使用的解构相当于:

const graphqlHTTP = require('express-graphql').graphqlHTTP;
Run Code Online (Sandbox Code Playgroud)

require('express-graphql')返回一个对象,该对象具有一个被调用的属性graphqlHTTP,该对象是您要调用的函数。

你试图调用对象本身,就好像它是一个函数一样。


Huy*_*Huy 24

昆汀的回答是当场的。显然,npm 文档已更新,但 YouTube 上的某些教程并未更新。这就是为什么像我这样的学习者会有一定程度的困惑。仍然有过时的代码版本,例如

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

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

或者这个:https : //github.com/bradtraversy/customerbase/blob/master/server.js

它们都应该更新为

const { graphqlHTTP } = require('express-graphql');
Run Code Online (Sandbox Code Playgroud)

进而

app.use('/graphql', graphqlHTTP({
    schema:schema,
    graphiql:true
}));
Run Code Online (Sandbox Code Playgroud)


小智 9

您可以使用

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

app.use('/graphql', gqlHTTP.graphqlHTTP({
 // something
}))
Run Code Online (Sandbox Code Playgroud)


Cod*_*ker 9

该代码是用早期版本的express-graphql.

在 v0.10.0 之前,您可以使用

var graphqlHTTP = require('express-graphql');
Run Code Online (Sandbox Code Playgroud)

v0.10.0 之后,您需要使用

var { graphqlHTTP } = require('express-graphql');
Run Code Online (Sandbox Code Playgroud)


Cha*_*ukh 6

只是为了让它更清楚:

在“express-graphql”返回直接函数或带有该函数的类之前,我们可以将其分配给任何变量,例如 graphqlServer

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

现在,它返回包含一个名为“graphqlHTTP”的函数的整个对象。因此代码应该是

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

并建立联系,

app.use('/graphql', graphqlHTTP({
    // your config
})); 
Run Code Online (Sandbox Code Playgroud)