背景描述:

最近在练习前后端分离的项目,遇到的问题由此记录下来。

边学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:@cluster0.yrjg9md.mongodb.net/?retryWrites=true&w=majority' // 此处的“”是我自己在创建数据库的时候自己设置的,此处保密哈

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:@cluster0.yrjg9md.mongodb.net/?retryWrites=true&w=majority'

const CONNECTION_URL = 'mongodb://genhualu:@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' // 此处的“”是我自己在创建数据库的时候自己设置的,此处保密哈

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,再次运行程序,运行成功。画面如下所示:

推荐阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。