背景描述:
最近在练习前后端分离的项目,遇到的问题由此记录下来。
边学Express边自己写后台接口,在用Mongoose连接MongoDB数据库的时候出现了一个奇怪的问题,我在浏览器访问链接时候才发现了问题。
服务器端代码如下:
index.js:
import express from 'express'
import bodyParser from 'body-parser'
import cors from 'cors'
import mongoose from 'mongoose'
import postRoutes from './routes/posts.js'
const app = express()
// 给路由添加了访问前缀
app.use('/posts', postRoutes)
app.use(bodyParser.json({ limit: '30mb', extended: true }))
app.use(bodyParser.urlencoded({ limit: '30mb', extended: true }))
app.use(cors())
const CONNECTION_URL = 'mongodb+srv://genhualu:<password>@cluster0.yrjg9md.mongodb.net/?retryWrites=true&w=majority' // 此处的“<password>”是我自己在创建数据库的时候自己设置的,此处保密哈
const PORT = process.env.PORT || 5000
mongoose.set('strictQuery', false)
mongoose.connect(CONNECTION_URL)
.then(() => app.listen(PORT, () => console.log(`Server running on port: ${PORT}`)))
.catch((error) => console.log('error: ', error.message))
// mongoose.set('useFindAndModify', false)
// https://cloud.mongodb.com/v2/6331478119994d3051fb1bd6#/clusters/connect?clusterId=Cluster0
package,json:
{
"name": "server",
"version": "1.0.0",
"description": "",
"main": "index.js",
"type": "module",
"scripts": {
"start": "nodemon index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"body-parser": "^1.20.1",
"cors": "^2.8.5",
"express": "^4.18.2",
"mongoose": "^6.9.0",
"nodemon": "^2.0.20"
}
}
报错描述:
当我在终端输入
npm start
运行程序后,没有报错,但是也没有显示“Server running on port: 5000”这句话,说明程序应该是有问题的。然后`CTRL+C`关闭程序,继而在终端输入
node index.js
等待了很长一段时间,终端才输出这样一句话:

解决方法:
后来做了这样一件事,问题就解决了。
可能是因为我的node版本与npm版本不一致问题才导致这次的问题,所以我转到MongoDB的数据库页面,点击“connect”来连接数据库,选择“连接到我的应用”,出现如下画面:

将node.js版本改为2.2.12 or later即可。

此外,数据库的connection string也需要更改。
附上更改好的代码:
import express from 'express'
import bodyParser from 'body-parser'
import cors from 'cors'
import mongoose from 'mongoose'
import postRoutes from './routes/posts.js'
const app = express()
// 给路由添加了访问前缀
app.use('/posts', postRoutes)
app.use(bodyParser.json({ limit: '30mb', extended: true }))
app.use(bodyParser.urlencoded({ limit: '30mb', extended: true }))
app.use(cors())
// const CONNECTION_URL = 'mongodb+srv://genhualu:<password>@cluster0.yrjg9md.mongodb.net/?retryWrites=true&w=majority'
const CONNECTION_URL = 'mongodb://genhualu:<password>@ac-g6dhzl1-shard-00-00.yrjg9md.mongodb.net:27017,ac-g6dhzl1-shard-00-01.yrjg9md.mongodb.net:27017,ac-g6dhzl1-shard-00-02.yrjg9md.mongodb.net:27017/?ssl=true&replicaSet=atlas-vvxzs5-shard-0&authSource=admin&retryWrites=true&w=majority' // 此处的“<password>”是我自己在创建数据库的时候自己设置的,此处保密哈
const PORT = process.env.PORT || 5000
mongoose.set('strictQuery', false)
mongoose.connect(CONNECTION_URL)
.then(() => app.listen(PORT, () => console.log(`Server running on port: ${PORT}`)))
.catch((error) => console.log('error: ', error.message))
回到vscode,再次运行程序,运行成功。画面如下所示:
