当我尝试(通过mongoose)向mongodb添加数据时,会超时



我是MERN开发的新手,我一直试图将用户的用户名、电子邮件和密码添加到数据库中,但我遇到了这个错误(当我在vscode中以json格式从thunderclient连接到数据库后尝试添加用户时(:

[nodemon] 2.0.19
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node ./index.js`
Example app listening on port 3000
connected to mongodb successfully
{ name: 'kashish', email: 'mail@mail.com', password: '1234' }
/home/alien/codes/webDev/react/inotebook/backend/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:151
const err = new MongooseError(message);
^
MongooseError: Operation `users.insertOne()` buffering timed out after 10000ms
at Timeout.<anonymous> (/home/alien/codes/webDev/react/inotebook/backend/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:151:23)
at listOnTimeout (node:internal/timers:564:17)
at process.processTimers (node:internal/timers:507:7)
Node.js v18.7.0

[节点]应用程序崩溃-在启动之前等待文件更改。。。

代码成功连接到数据库,但当我尝试添加用户时(在调用api之前使用雷电客户端(,它只是向我显示了给定的错误,这里的错误是分别连接到数据库和在数据库中保存数据的代码:

const mongoose=require("mongoose")
const mongoUri="mongodb://localhost:27017"
const connectMongo=() => {
mongoose.connect(mongoUri,() => {
console.log("connected to mongodb successfully");
}).catch(error => handleError(error))
}
module.exports=connectMongo;

添加用户的代码:

const express=require('express');
const User=require('../models/User');
const router=express.Router();
router.get('/',(req,res) => {
console.log(req.body);
const user=User(req.body);
user.save()
res.send(req.body);
})
module.exports=router;

我试着从论坛上浏览类似的问题,但我一个都不明白,我错过了什么?

另一个编辑:当我尝试使用async函数并添加wait-before-user.save((时,没有发生响应,不确定这是否明显,但用户数据显示在控制台中,但在保存数据时碰巧发生了错误,是否可能在保存数据之前发生了超时?我在localhost上托管mongodb,所以这不是互联网问题

以下是auth.js:的更新代码

const express=require('express');
const User=require('../models/User');
const router=express.Router();
router.get('/',async (req,res) => {
console.log(req.body);
const user=User(req.body);
await user.save()
res.send(req.body);
})
module.exports=router;

更新了db.js(连接到数据库(的错误处理代码:

const mongoose=require("mongoose")
const mongoUri="mongodb://localhost:27017"
const connectMongo=() => {
mongoose.connect(mongoUri).then(
() => console.log('connected')
).catch(e => console.log('error',e))
}
module.exports=connectMongo;

在代码中进行上述更新后,这将在几分钟内显示:

Example app listening on port 3000
error MongooseServerSelectionError: connect ECONNREFUSED ::1:27017
at Connection.openUri (/home/alien/codes/webDev/react/inotebook/backend/node_modules/mongoose/lib/connection.js:824:32)
at /home/alien/codes/webDev/react/inotebook/backend/node_modules/mongoose/lib/index.js:380:10
at /home/alien/codes/webDev/react/inotebook/backend/node_modules/mongoose/lib/helpers/promiseOrCallback.js:41:5
at new Promise (<anonymous>)
at promiseOrCallback (/home/alien/codes/webDev/react/inotebook/backend/node_modules/mongoose/lib/helpers/promiseOrCallback.js:40:10)
at Mongoose._promiseOrCallback (/home/alien/codes/webDev/react/inotebook/backend/node_modules/mongoose/lib/index.js:1225:10)
at Mongoose.connect (/home/alien/codes/webDev/react/inotebook/backend/node_modules/mongoose/lib/index.js:379:20)
at connectMongo (/home/alien/codes/webDev/react/inotebook/backend/db.js:5:14)
at Object.<anonymous> (/home/alien/codes/webDev/react/inotebook/backend/index.js:3:1)
at Module._compile (node:internal/modules/cjs/loader:1120:14) {
reason: TopologyDescription {
type: 'Unknown',
servers: Map(1) { 'localhost:27017' => [ServerDescription] },
stale: false,
compatible: true,
heartbeatFrequencyMS: 10000,
localThresholdMS: 15,
logicalSessionTimeoutMinutes: undefined
},
code: undefined
}

在你问之前,我在启动应用程序之前已经运行了sudo systemctl start mongodb。这是sudo systemctl status mongodb:的输出

● mongodb.service - MongoDB Database Server
Loaded: loaded (/usr/lib/systemd/system/mongodb.service; disabled; preset: disabled)
Active: active (running) since Mon 2022-08-22 14:59:01 IST; 24s ago
Docs: https://docs.mongodb.org/manual
Main PID: 5840 (mongod)
Memory: 163.0M
CPU: 857ms
CGroup: /system.slice/mongodb.service
└─5840 /usr/bin/mongod --config /etc/mongodb.conf
error MongooseServerSelectionError: connect ECONNREFUSED ::1:27017

当MongoDB客户端试图通过IPv6连接到MongoDB服务器,但服务器实际上没有侦听IPv6时,就会出现这个问题(无论出于何种原因;我认为旧版本的服务器必须被告知侦听IPv6,但更新版本的服务器应该自动侦听,除非它被明确关闭(。

要强制客户端通过IPv4进行连接,请使用IPv4本地主机地址:

const mongoUri="mongodb://127.0.0.1:27017"

最新更新