了解 Node 中的 TypeError“不是函数”[重复]

Posted

技术标签:

【中文标题】了解 Node 中的 TypeError“不是函数”[重复]【英文标题】:Understanding a TypeError "Not a fucntion" in Node [duplicate] 【发布时间】:2020-10-28 01:08:44 【问题描述】:

我环顾四周,虽然这似乎是一个常见错误,但我无法真正找到我做错的答案。


    const express = require('express')
    const expressGraphQL = require('express-graphql')
    const app = express()
    
    app.use('/graphql', expressGraphQL(
        graphiql: true
    ))
    app.listen(5000., () => console.log('Server is Running'))

每当我编译时,我都会收到此错误...


    app.use('/graphql', expressGraphQL(
                        ^
    
    TypeError: expressGraphQL is not a function
        at Object.<anonymous> (C:\Node\Project_GraphQL\server.js:5:21)
        at Module._compile (internal/modules/cjs/loader.js:778:30)
        at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
        at Module.load (internal/modules/cjs/loader.js:653:32)
        at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
        at Function.Module._load (internal/modules/cjs/loader.js:585:3)
        at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
        at startup (internal/bootstrap/node.js:283:19)
        at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
    [nodemon] app crashed - waiting for file changes before starting...

我正在尝试在此处和附近跟随此视频,据我所知,我已经逐行复制了它....

https://youtu.be/ZQL7tL2S0oQ?t=565

我误解了什么,做错了什么?

【问题讨论】:

【参考方案1】:

如果你使用上一个版本,express-graphql 返回一个对象,在这种情况下你应该使用:

const  graphqlHTTP  = require('express-graphql')

或在您的代码中

app.use('/graphql', expressGraphQL.graphqlHTTP(
    graphiql: true
))

【讨论】:

【参考方案2】:

如果您看到 npm 文档 here。 graphqlHTTP 是从模块导出的函数(它使用对象destructring)。

所以你的代码应该如下所示

const express = require('express');
const  graphqlHTTP  = require('express-graphql');
 
const app = express();
 
app.use(
  '/graphql',
  graphqlHTTP(
   
    graphiql: true,
  ),
);
 
app.listen(5000., () => console.log('Server is Running'))

【讨论】:

以上是关于了解 Node 中的 TypeError“不是函数”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

node-lambda - TypeError:处理程序不是函数

获取 TypeError:path.split 不是 Mongoose 中的函数

TypeError:回调不是函数,“node_modules\jsonwebtoken\sign.js:101:14)”

TypeError:vue.openBlock 不是函数,同时使用自定义节点模块中的 vue 组件

TypeError:rtdb.initStandalone 不是函数

TypeError:Object.entries 不是函数