【问题标题】:Mongoose is not connecting MongoDB AtlasMongoose 没有连接 MongoDB Atlas
【发布时间】:2019-10-23 04:35:09
【问题描述】:

这是我第一次使用 MongoDB Atlas 与 Mongo 一起工作,在尝试连接时,这是我得到的错误:

Error: connect ECONNREFUSED 3.209.60.172:27017
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1054:14) {
  name: 'MongoNetworkError',
  errorLabels: [ 'TransientTransactionError' ],
  [Symbol(mongoErrorContextSymbol)]: {}
}

这是我的代码:

const express = require('express');
const mongoose = require('mongoose');

const app = express();

mongoose.connect('mongodb+srv://johnnybox:<password>@cluster0-cgxqx.mongodb.net/test?retryWrites=true&w=majority', { 
  useNewUrlParser: true
}).then(() => console.log('MongoDB Connected...'))
  .catch(err => console.log(err));

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

app.use(require('./routes'));

app.listen(3331);

ps* 我没有丢失我的凭据

已经在这里寻找解决方案,但没有与我的问题类似的问题。

我的白名单:

【问题讨论】:

  • mongoose.connect()uri 部分的末尾删除&amp;w=majority。如果它不起作用,请将您的mongoose.connect() 放在app.listen() 之前和任何app.use() 之后。让我知道这次它是否有效。
  • Matin 没有任何改变,甚至删除 &amp;w=majority 并重新定位...:/
  • 根据answer,这一切最终都归结为IP问题(我知道你试过了)。也许您正在使用 VPN 或一些阻碍它的代理。或者它可能是您的 ISP。还将您的集群区域更改为美国的任何地方。
  • 我现在意识到您可能会将您自己的 MongoDB 用户名与您创建的“数据库用户”混为一谈。看看您是否使用自己制作的数据库用户名和密码。告诉我。
  • 我发现了问题伙计们

标签: node.js mongodb mongoose mongodb-atlas


【解决方案1】:

试试这个

mongoose
  .connect(
    'mongodb+srv://{my_user}:{mypass}@johnnybox-cgxqx.mongodb.net/johnnybox?retryWrites=true&w=majority',
    { useNewUrlParser: true }
  )
  .then(() => console.log('MongoDB Connected...'))
  .catch(err => console.log(err));

【讨论】:

  • 收到此错误Error: connect ECONNREFUSED 3.214.209.13:27017 at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1054:14) { name: 'MongoNetworkError', errorLabels: [ 'TransientTransactionError' ], [Symbol(mongoErrorContextSymbol)]: {} }
  • 你的数据库名称是什么?
  • 它是“johnnybox”
  • 那么在猫鼬连接上mongodb+srv://{my_user}:{mypass}@johnnybox-cgxqx.mongodb.net/johnnybox 应该足够了
  • 你在用mongodb compass吗?
【解决方案2】:

尝试在 mongo atlas IP 白名单中添加您的 IP 地址。 否则,如果您不需要安全连接,则接受所有连接。

【讨论】:

    【解决方案3】:

    新错误的新答案:

    根据这个answer,有完全相同的错误,即:

    'MongoNetworkError',
      errorLabels: [ 'TransientTransactionError' ],
      [Symbol(mongoErrorContextSymbol)]:
    

    在 MongoDB 网站中的“clusters/security/whitelist”之后将您当前的 IP 添加到白名单。

    对不起,我花了至少一个小时来解决这个问题。我能做的就这些了。


    解决前一个错误的旧答案(他修复了这部分,但仍然有一个新错误):

    如果你仔细阅读错误日志,它会说:

    UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block
    

    这意味着您需要将catch() 添加到您的猫鼬连接中:

    mongoose.connect({some code}).then({some code}).catch(err =&gt; console.log(err))

    【讨论】:

    • 我更新了我的问题,就像 Afrida 所说的那样,但错误发生了变化
    • @JoãoVitor 抱歉,我在尝试解决您的问题时没有阅读她的回答。
    • 没关系,我的问题现在是更新的错误和捕获块
    【解决方案4】:

    我尝试在家里运行这段代码,它运行良好!

    所以这是我办公室里的东西,经过一些测试,问题出在连接端口被锁定。

    看看:

    Error: connect ECONNREFUSED 3.209.60.172:27017
    

    注意它连接到端口27017

    **IP是随机的,所以每次申请都会改变。

    我的Sd打开这个端口后,一切正常!!

    非常感谢你们的帮助!

    【讨论】:

      【解决方案5】:

      对于那些尝试过各种 URI 的人来说,唯一让它在这里工作的是添加你的 IP允许从任何地方访问。希望这可以节省您一些时间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-06
        • 2019-03-14
        • 2020-02-22
        • 2020-07-25
        • 2017-09-09
        • 1970-01-01
        • 2021-08-29
        • 2020-08-16
        相关资源
        最近更新 更多