![](/img/trans.png)
[英]Operation `users.insertOne()` buffering timed out after 10000ms in, Node.js, MongooseError
[英]"Error: MongooseError: Operation `users.insertOne()` buffering timed out after 10000ms",
我在 node express 上運行 MongoDB Atlas,當我用 postman 測試時出現了這個錯誤。
const express = require('express');
const cors = require('cors');
const mongoose = require('mongoose');
require('dotenv').config();
const app = express();
const port = process.env.PORT || 5000;
app.use(cors());
app.use(express.json());
const uri = process.env.ATLAS_URI;
mongoose.connect(uri, { useNewUrlParser: true, useCreateIndex: true }
);
const connection = mongoose.connection;
connection.once('open', () => {
console.log("MongoDB database connection established successfully");
})
const exercisesRouter = require('./routes/exercises');
const usersRouter = require('./routes/users');
app.use('/exercises', exercisesRouter);
app.use('/users', usersRouter);
app.listen(port, () => {
console.log(`Server is running on port: ${port}`);
});
這是我的.env
,我猜問題也可能在這里,請幫忙:
ATLAS_URI=mongodb+srv://userone:useronepassword1234@cluster0.swye5.mongodb.net/<dbname>?retryWrites=true&w=majority
就我而言,我必須將 go 設置為 Atlas,並將我列入白名單的 IP 重置為正確的地址。
然后我重新啟動了我的本地服務器並嘗試在 postman 上再次發布......它成功了!
首先將<dbname>
替換為您的實際數據庫名稱,如果未創建,請創建一個。
然后根據需要在 Atlas UI 上創建集合。
在網絡訪問中,單擊添加 IP ADDRESS 和 select“允許從任何地方訪問”。
用這種方式重寫你的代碼:
mongoose
.connect(process.env.MONGO_PROD_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true, })
.then(() => console.log("Database connected!"))
.catch(err => console.log(err));
如果仍未解決,請檢查此鏈接。
我面臨着同樣的問題。 解決了。 我認為您可能不允許 Atlas 中的每個人都可以訪問網絡:MongoDB。 這樣做會解決問題。
在 MongoDB 雲中檢查您的網絡訪問 IP 列表。您將只能從 IP 地址列表連接到您的集群
確保您的 IP 地址設置處於活動狀態
檢查您是否忘記在連接字符串中設置密碼。
我也面臨同樣的錯誤。 就我而言,出現錯誤是因為在 mongoose 連接useFindAndModify
設置為false
有錯誤的代碼
mongoose.connect(dbUrl, {
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false
}, () => {
console.log('connected to database myDb ;)')
})
工作代碼
mongoose.connect(dbUrl, {
useNewUrlParser: true,
useUnifiedTopology: true
}, () => {
console.log('connected to database myDb ;)')
})
如果您使用 Typescript 看到此內容,請確保您從 mongoose 導入連接 function 並使用它進行連接。
import { connect } from "mongoose";
connect(...).then()
有點晚了,但可能是因為這條線useCreateIndex: true
它不起作用。 似乎在 mongoDB 版本 5 中。不再支持此功能。 像 manoj_mi5 的答案一樣重寫
mongoose
.connect(process.env.MONGODB_URL, {
useNewUrlParser: true,
useUnifiedTopology: true})
.then(() => console.log("Database connected!"))
.catch(err => console.log(err));
檢查是否有更多錯誤。
更改您的 MongoDB 數據庫用戶密碼。 它應該是沒有特殊字符的字母數字。 對我來說沒有任何效果,但是更改密碼確實有效。
“錯誤:MongooseError:操作users.insertOne()
緩沖在 10000 毫秒后超時”
mongoose.connect(process.env.MONGO_URL, { useNewURLParser: true, useUnifiedTopology: true, useCreateIndex: true, },6000000).then(console.log("connected to server")).catch((err) => console.log(err));
在選項后添加時間,例如 6000000
在 Mongoose 版本 6 及更高版本中不需要這些
{ useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
useFindAndModify: false
}
所以只需刪除它。 如果您仍然看到app crashed - waiting for file changes before starting...
只需再保存一次,它就會工作
在 mongoose 的最新版本中。
我們不需要這個 object。
{ useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, useFindAndModify: false }
但是,如果您正在處理舊版本的 mongoose,那么您肯定需要它。 同樣在您的 mongodb 網絡地址中添加此地址 0.0.0.0/0 代替您的 ip 地址。
為了解決這個問題,我在 index.js 中創建了一個 function,我在其中異步連接到我的數據庫,然后啟動服務器,因為 mongoose 不等待數據庫連接它就地執行所有操作,對我來說這就是問題所在。
async function start() {
try {
//Database Connect
await mongoose.connect(
process.env.DB_CONNECTION,
{
useNewUrlParser: true,
useUnifiedTopology: true,
},
() => {
console.log("Database Connected");
}
);
app.listen(3000, () => {
console.log("Server is running on port 3000 ...");
});
} catch (error) {
console.error(error);
}
}
仔細檢查下面列出的一些內容。
通過以下方式添加新的 IP 地址:-> 點擊添加 IP 地址 -> 點擊允許從任何地方訪問 -> 點擊確認。
現在,運行應用程序。
檢查以上所有要點並使其正確已為我解決了問題。 希望你也一樣。 :)
提及您的數據庫名稱 dbname -> yourDbName without < > 這將解決您的問題
URI=mongodb+srv://<username>:
<password>@cluster0.swye5.mongodb.net/<dbname>?retryWrites=true&w=majority
我最近遇到了類似的問題,我認為錯誤是
需要('dotenv').config()
改成這個
需要('dotenv/config')
或者
需要('dotenv')
導入 package 后,調用配置 function
dotenv.config()
此錯誤可能是由用戶屬性中的拼寫錯誤引起的。 (我試圖設置“電子郵件”而不是在我的用戶 model 上定義的內容:“電子郵件”)。
我遇到了同樣的問題。 但是我的 MongoDB 在我的機器上本地運行。 在將查詢發送到數據庫之前,我忘記打開連接。 所以,我添加了打開和關閉連接的代碼,它工作了。
try{ await mongoose.connect(uri); // My mongoose database request code } finally{ await mongoose.connection.close(); }
我遇到了同樣的問題,我刪除useCreateIndex: true
,並且只使用了:
{
useNewUrlParser: true
}
所以我遇到了同樣的錯誤,但就我而言,原因是因為我使用了mongoose.createConnection(...)
方法而不是mongoose.connect(...)
方法。
兩者之間的相關區別在於,使用mongoose.connect
時,創建的連接會在您執行mongoose.model('User', userSchema)
時自動鏈接到您的貓鼬模型。 但是,對於mongoose.createConnection
,您需要像這樣直接將它與您的模式鏈接起來:
import * as mongoose from 'mongoose'
import { userSchema } from '../path/to/your/schema'
const dbURL = 'mongodb://localhost:27017'
const db = mongoose.createConnection(dbURL, {dbName: 'my-db-name'})
export const User = db.model('User', userSchema)
重要的一點是在最后一行,我們使用創建的連接實例db
來創建我們的模型,而不是直接使用mongoose.model
。
請記住,此解決方案僅在您使用mongoose.createConnection
而不是mongoose.connect
時才相關
創建新的數據庫用戶為我工作。
我關閉了我的移動熱點並重新打開並且它起作用了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.