下面是我的简单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
我该怎么修呢
8条答案
按热度按时间hmmo2u0o1#
看看documentation:
请注意,它使用的解构等效于:
require('express-graphql')
返回一个名为graphqlHTTP
的 * 对象 *,该对象带有一个 * 属性 *,graphqlHTTP
是您要调用的函数。你试图像调用函数一样调用对象本身。
qqrboqgw2#
Quentin的回答很到位。显然npm documentation更新了,但是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
它们都应该更新为
然后
vojdkbi03#
您可以使用
hc2pp10m4#
只是为了让它更清楚:
在“express-graphql”返回一个直接函数或带有函数的类之前,我们可以将其赋给任何变量,如graphqlServer
const graphqlServer = require('express-graphql');
现在,它返回整个对象,其中包含一个名为“graphqlHTTP”的函数。因此代码应该是
const { graphqlHTTP } = require('express-graphql');
并且为了建立连接,
ukdjmx9f5#
此代码是使用
express-graphql
的早期版本编写的。在v0.10.0之前,您可以使用
在v0.10.0之后,您需要使用
nfg76nw06#
上面的答案解决了同样的问题。
对于任何想知道的人,express-graphql版本0.10.0是相关更改开始的地方,所以你可以检查你的package.json express-graphql依赖版本号。
https://www.npmjs.com/package/express-graphql/v/0.9.0
https://www.npmjs.com/package/express-graphql/v/0.10.0
dluptydi7#
简单设置:
不要使用自己的参数,严格使用{ graphqlHTTP }!!!!
只需将express-graphql作为路由处理程序挂载:
ljo96ir58#
正如Quentin提到的,你试图调用对象本身,就好像它是一个函数一样。你可以更新下面的行来使用解构:即更新--〉常量图形qlHTTP = require('express-graphql');到--〉const {图形HTTP} =需要('表达式图形');