我遇到了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’) 这样的代码。我不知道它是否有错误或是否能成功运行,但如果遇到错误,可以参考一下。