【问题标题】:how to properly connect to mongodb.atlas? MongoNetworkError如何正确连接到 mongodb.atlas? MongoNetworkError
【发布时间】:2020-01-07 08:27:41
【问题描述】:

我正在学习如何将 MongoDB 与 node.js 一起使用,因此我正在制作一个 Restful API 作为练习。

但每当我尝试连接到 mongo 的地图集时,我都会收到“MongoNetworkError: getaddrinfo ENOTFOUND”。

我的代码server.js:

// call the packages
var bodyParser = require('body-parser');
var Bear = require('./app/models/bear');
var mongoose = require('mongoose');

var express = require('express');
var app = express();

const MongoClient = require('mongodb').MongoClient;
const uri = "mongodb://<userName>:<pasword>@cluster0-<someCharacters>.mongodb.net/test?retryWrites=true&w=majority";
const client = new MongoClient(uri, { useNewUrlParser: true });
client.connect( err => {
  console.log(err);
  //const collection = client.db("test").collection("devices");
  client.close();
});

/*rest of the code is commented out*/
...

它记录以下错误:

{ MongoNetworkError: failed to connect to server [cluster0-<someCharacters>.mongodb.net:27017] on first connect [MongoNetworkError: getaddrinfo ENOTFOUND cluster0-<someCharacters>.mongodb.net cluster0-<someCharacters>.mongodb.net:27017]
at Pool.<anonymous> (/app/node_modules/mongodb-core/lib/topologies/server.js:431:11)
at Pool.emit (events.js:198:13)
at connect (/app/node_modules/mongodb-core/lib/connection/pool.js:557:14)
at makeConnection (/app/node_modules/mongodb-core/lib/connection/connect.js:39:11)
at callback (/app/node_modules/mongodb-core/lib/connection/connect.js:261:5)
at Socket.err (/app/node_modules/mongodb-core/lib/connection/connect.js:286:7)
at Object.onceWrapper (events.js:286:20)
at Socket.emit (events.js:198:13)
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at process._tickCallback (internal/process/next_tick.js:63:19)
name: 'MongoNetworkError',
errorLabels: [ 'TransientTransactionError' ],
[Symbol(mongoErrorContextSymbol)]: {} }

注释:

  • &lt;userName&gt;&lt;pasword&gt;&lt;someCharacters&gt; 相应地表示字符
  • 我在笔记本电脑和 Heroku 上都得到了相同的结果
  • 如果在本地设置 MongoDB,它可以在 localhost 上正常工作
  • 我直接从 cloud.mongodb.com 获得了连接字符串

我可能做错了什么?

【问题讨论】:

    标签: javascript node.js database mongodb mongoose


    【解决方案1】:

    你安装了 mongoose,但你正在尝试连接 mongodb 包。因为你安装了猫鼬

    const mongoUri="your connection string here"
    mongoose.connect(mongoUri,{useNewUrlParser:true})
    .catch((e)=>{
        console.log(e.message)
        process.exit(1)
    })
    .then(()=>{
        console.log("connected to Mongo Atlas")
    })
    

    mongoose.connect 返回承诺。如果有错误,连接将被拒绝,它会记录错误然后退出进程。如果连接成功,则表示 promise 已解决,因此它将连接,然后记录“已连接到 Mongo Atlas”

    但是我建议你检查你的连接字符串。它应该有“+srv”,像这样

      mongodb+srv://
    

    【讨论】:

    • 谢谢,我也犯了一个错误,没有把我的IP地址加入白名单
    猜你喜欢
    • 2022-07-27
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 2018-10-14
    • 2019-02-26
    • 1970-01-01
    相关资源
    最近更新 更多