Javascript graphqlHTTP不是一个函数

Javascript graphqlHTTP不是一个函数,javascript,node.js,express,graphql,express-graphql,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, () => { consol

这是我的简单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!");
});
运行时,我遇到以下错误:

 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
graphqlHTTP({
^
TypeError:graphqlHTTP不是函数
对象处。(D:\PersonalProjects\GraphQL\server\app.js:7:5)
at模块编译(内部/modules/cjs/loader.js:1138:30)
at Object.Module._extensions..js(internal/modules/cjs/loader.js:1158:10)
在Module.load(内部/modules/cjs/loader.js:986:32)
at Function.Module._load(内部/modules/cjs/loader.js:879:14)
在Function.executeUserEntryPoint[作为runMain](internal/modules/run_main.js:71:12)
在internal/main/run_main_module.js:17:47
如何修复它?请提前感谢!

查看:

请注意,它使用的解构等效于:

const graphqlHTTP = require('express-graphql').graphqlHTTP;
require('express-graphql')
返回一个具有名为
graphqlHTTP
的属性的对象,该属性就是您要调用的函数


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

昆汀的回答是现场的。很明显,该文件已经更新,但YouTube上的一些教程没有更新。这就是为什么像我这样的学习者会有一定程度的困惑。 还有一些过时的代码版本,比如

这个:

这个:

或者这个:

它们都应该更新到

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

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

通过上述答案解决了同样的问题

对于任何想知道的人,express graphql版本0.10.0是相关更改的起点,因此您可以检查您的package.json express graphql依赖项版本号


您可以使用

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

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

更清楚地说:

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

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

现在,它返回整个对象,其中包含一个名为“graphqlHTTP”的函数

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

为了建立联系

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

简单设置

不要使用自己的参数严格使用{graphqlHTTP}

只需将express graphql装载为路由处理程序:

const express=require('express');
const{graphqlHTTP}=require('express-graphql');
常量app=express();
应用程序使用(
“/graphql”,
graphqlHTTP({
模式:MyGraphQLSchema,
graphiql:是的,
}),
);
app.listen(4000,()=>{
console.log('服务器正在端口4K上运行')

)
首先,您需要解构

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

谢谢。这真的很有帮助。我在观看2019年3月2日的40分钟GraphQL视频教程时遇到了这个错误。
const { graphqlHTTP } = require('express-graphql');