【Express】报错:MongoDB数据库连接不上且报错

作者在练习前后端分离项目中遇到Mongoose连接MongoDB时的问题。问题表现为运行程序后无响应。解决方案是更新Node.js版本至2.2.12或更高,并修正数据库的connectionstring,确保包括正确的服务器地址和端口。修改后,程序成功运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景描述:

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

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

要使用 Socket.io 连接数据库并在浏览器输出,需要进行以下步骤: 1. 安装 Socket.io 和相关依赖库 在命令行中输入以下命令安装 Socket.io 和相关依赖库: ``` npm install socket.io express mongoose ``` 其中,`express` 是一个 Node.js 的 web 框架,`mongoose` 是一个 MongoDB 的对象文档映射工具。 2. 在服务器端连接数据库 在服务器端的代码中,首先需要连接数据库。可以使用 `mongoose.connect()` 方法连接 MongoDB 数据库。例如: ```javascript const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/my_database', { useNewUrlParser: true }); ``` 这里连接了本地的 `my_database` 数据库。 3. 使用 Socket.io 在服务器端进行数据交互 在服务器端的代码中,需要使用 Socket.io 提供的 API 来与客户端进行数据交互。可以使用 `io.on()` 方法监听客户端的连接请求,例如: ```javascript const io = require('socket.io')(server); io.on('connection', (socket) => { console.log('A user connected!'); // 在这里可以对数据进行操作,例如从数据库中读取数据,然后发送给客户端 socket.emit('message', 'Hello world!'); }); ``` 这里使用 `socket.emit()` 方法向客户端发送一条消息。 4. 在客户端使用 Socket.io 连接服务器 在客户端的代码中,需要使用 Socket.io 提供的 API 来连接服务器。可以使用 `io.connect()` 方法连接服务器,例如: ```javascript const socket = io.connect('http://localhost:3000'); socket.on('message', (data) => { console.log(data); }); ``` 这里连接了本地的服务器,端口号为 3000。然后使用 `socket.on()` 方法监听服务器发送的消息。 5. 在浏览器中输出数据 在客户端的代码中,可以使用 JavaScript 来操作 DOM 元素,将数据输出到浏览器中。例如: ```javascript const messageDiv = document.getElementById('message'); socket.on('message', (data) => { messageDiv.innerHTML = data; }); ``` 这里将服务器发送的消息插入到 id 为 `message` 的 div 元素中。 如果以上步骤都正确执行,就可以使用 Socket.io 连接数据库并在浏览器输出数据了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值