【问题标题】:"Error: MongooseError: Operation `users.insertOne()` buffering timed out after 10000ms",“错误:MongooseError:操作 `users.insertOne()` 缓冲在 10000 毫秒后超时”,
【发布时间】:2022-04-03 06:04:37
【问题描述】:

我在 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

【问题讨论】:

  • 请关注此answer 并将您的 DNS 更改为 8.8.8.8 并且可以正常工作
  • 在 mongo atlas 中,您需要允许您的 ip 连接才能设置它,但它是一个权限

标签: javascript node.js mongodb express mongoose


【解决方案1】:

就我而言,我必须去 Atlas,并将我列入白名单的 IP 重置为正确的地址。

然后我重新启动了本地服务器并尝试再次在邮递员上发帖......它成功了!

【讨论】:

    【解决方案2】:
    1. 首先将&lt;dbname&gt;替换为您的实际数据库名称,如果未创建, 创建一个。

    2. 然后根据需要在 Atlas UI 上创建集合。

    3. 在网络访问中,点击添加 IP 地址并选择“允许 从任何地方访问”。

    4. 用这种方式重写你的代码:

    mongoose 
     .connect(process.env.MONGO_PROD_URI, {
            useNewUrlParser: true,
            useUnifiedTopology: true,
            useCreateIndex: true,   })   
     .then(() => console.log("Database connected!"))
     .catch(err => console.log(err));
    
    1. 现在您的数据库应该已连接并且工作正常。

    如果仍未解决,请检查this link

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题。解决了。我认为您可能不允许 Atlas: MongoDB 中的每个人都可以通过网络访问。这样做会解决问题。

      【讨论】:

        【解决方案4】:

        在 MongoDB Cloud 中检查您的网络访问 IP 列表。您将只能从 IP 地址列表连接到您的集群

        确保您的 IP 地址设置处于活动状态

        【讨论】:

          【解决方案5】:

          检查你是否忘记在连接字符串中设置密码。

          【讨论】:

          【解决方案6】:

          第 1 步:

          转到您的 Atlas 帐户并打开您的项目。

          第 2 步:

          在左侧菜单中,导航至Network Access 部分:

          第三步:

          添加您的 IP 地址,以便只有您能够连接到您的集群。您也可以添加0.0.0.0/0,它将允许从任何地方访问。

          【讨论】:

            【解决方案7】:

            我也遇到了同样的错误。就我而言,出现错误是因为 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 ;)') 
            })
            

            【讨论】:

              【解决方案8】:

              如果您使用 Typescript 看到此内容,请确保您从 mongoose 导入连接函数并使用它进行连接。

              import { connect } from "mongoose";
              
              connect(...).then()
              

              【讨论】:

                【解决方案9】:

                有点晚了,但可能是因为这条线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));
                

                检查是否还有更多错误。

                【讨论】:

                  【解决方案10】:

                  更改您的 MongoDB 数据库用户密码。它应该是没有特殊字符的字母数字。对我来说没有任何效果,但是更改密码确实有效。

                  【讨论】:

                    【解决方案11】:

                    在 Mongoose 版本 6 及更高版本中不需要这些

                    {    useNewUrlParser: true, 
                         useUnifiedTopology: true, 
                         useCreateIndex: true, 
                         useFindAndModify: false
                    }
                    

                    所以删除它。 如果你仍然看到app crashed - waiting for file changes before starting... 只需再保存一次,它就会起作用

                    【讨论】:

                      【解决方案12】:

                      “错误:MongooseError:操作users.insertOne()缓冲在10000ms后超时”

                      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

                      【讨论】:

                      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
                      【解决方案13】:

                      在最新版本的猫鼬中。

                      我们不需要这个对象。

                      { useNewUrlParser: true, 使用统一拓扑:真, 使用创建索引:真, 使用FindAndModify:假 }

                      但是,如果您正在处理旧版本的 mongoose,那么您肯定需要它。 同样在您的 mongodb 网络地址中添加此地址 0.0.0.0/0 代替您的 IP 地址。

                      【讨论】:

                        【解决方案14】:

                        在这行代码中,ATLAS_URI=mongodb+srv://userone:useronepassword1234@cluster0.swye5.mongodb.net/?retryWrites=true&w=majority

                        确保您写的实际数据库名称不带 符号。您必须首先在 Mongo Atlas 中创建数据库。

                        【讨论】:

                          【解决方案15】:

                          为了解决这个问题,我在 index.js 中创建了一个函数,我在其中异步连接到我的数据库,然后启动服务器,因为 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);
                            }
                          }
                          

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 1970-01-01
                            • 2023-02-26
                            • 2021-08-23
                            • 2021-10-15
                            • 2021-11-15
                            • 2021-12-08
                            • 2021-04-01
                            • 2021-06-30
                            相关资源
                            最近更新 更多