我遇到了express-graphql出现的错误。(I encountered an error with express-graphql.)

你试图做什么?

我打算搭建GraphQL + Express JS + MongoDB的环境。
但是在启动服务器时遇到了问题。

这个问题

使用mongoose连接到MongoDB。
在app.use的处理程序部分指定graphqlHTTP。
表面上看起来没问题。

//app.js

const express = require('express')
const graphqlHTTP = require('express-graphql')
const mongoose = require('mongoose')
const app = express()

mongoose.connect('mongodb+srv://testuser001:password@cluster0.fpkid.mongodb.net/my_db?retryWrites=true&w=majority')
mongoose.connection.once('open', () => {
  console.log('db connected')
})

app.use('/graphql', graphqlHTTP({

}));
app.listen(4000, () => {
  console.log('listening 4000')
})

但是,当使用nodemon app来启动服务器时,在graphqlHTTP的地方出现了错误。

$ nodemon app
[nodemon] 2.0.4
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node app.js`
graphql_dir/server/app.js:14
app.use('graphql', graphqlHTTP({
                   ^

TypeError: graphqlHTTP is not a function
    at Object.<anonymous> (/graphql_dir/server/app.js:14:20)

完全搞不懂哪里不对,花了大约30分钟还是没有头绪。

解决问题

这里详细地写了使用方式。

// 正解
const { graphqlHTTP }  = require('express-graphql')

就是说下面列举的是同义词对吧。


const graphqlHTTP = require('express-graphql').graphqlHTTP

似乎是直接将文件中的内容传递给了graphqlHTTP。

进行修正,然后使用nodemon app再次启动服务器。
成功地连接到了mongoDB!

$ nodemon app
[nodemon] 2.0.4
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node app.js`
(node:13225) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.
(Use `node --trace-deprecation ...` to show where the warning was created)
listening 4000
(node:13225) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
db connected

追加留言

然而,我在一些文章中看到了像 require(‘express-graphql’) 这样的代码。我不知道它是否有错误或是否能成功运行,但如果遇到错误,可以参考一下。

广告
将在 10 秒后关闭
bannerAds