簡體   English   中英

無法使用 Mongoose 連接到 MongoDB

[英]Can't Connect to MongoDB using Mongoose

我正在觀看 MERN 堆棧上的此視頻教程,但由於某些非常奇怪的原因,我無法連接到 MongoDB。 這個問題讓我很沮喪,因為我可能只是遺漏了一些非常基本的東西,所以如果答案對你來說很明顯,請原諒我。

視頻使用 mlab 為 MongoDB,它不再可用,所以我改為使用 MongoDB Atlas。 我應該用來將我的應用程序連接到數據庫的密鑰是:

mongodb+srv://<username>:<password>@fs-shopping-list.6rzkd.mongodb.net/<dbname>?retryWrites=true&w=majority

我的密碼沒有任何特殊字符,我的IP地址在白名單中。 至於dbname ,我有一個名為“data”的數據庫和一個名為“items”的集合,所以我使用“data”作為dbname

導致我出現問題的相關代碼位於名為server.js的文件中:

const db = require('./config/keys').mongoURI; // I keep my key in a separate file in the way shown in the video

// Connect to MongoDB
mongoose
    .connect(db, { useNewUrlParser: true, useUnifiedTopology: true })
    .then(() => console.log('MongoDB connected.'))
    .catch(err => console.log(err));

當我嘗試運行服務器時,我不斷收到此錯誤(我從一些路徑中刪除了我的名字):

{ MongooseServerSelectionError: bad auth Authentication failed.
    at NativeConnection.Connection.openUri (/fs_shopping_list/node_modules/mongoose/lib/connection.js:828:32)
    at Mongoose.connect (/fs_shopping_list/node_modules/mongoose/lib/index.js:335:15)
    at Object.<anonymous> (/fs_shopping_list/server.js:15:6)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
  message: 'bad auth Authentication failed.',
  reason:
   TopologyDescription {
     type: 'ReplicaSetNoPrimary',
     setName: null,
     maxSetVersion: null,
     maxElectionId: null,
     servers:
      Map {
        'fs-shopping-list-shard-00-01.6rzkd.mongodb.net:27017' => [ServerDescription],
        'fs-shopping-list-shard-00-02.6rzkd.mongodb.net:27017' => [ServerDescription],
        'fs-shopping-list-shard-00-00.6rzkd.mongodb.net:27017' => [ServerDescription] },
     stale: false,
     compatible: true,
     compatibilityError: null,
     logicalSessionTimeoutMinutes: null,
     heartbeatFrequencyMS: 10000,
     localThresholdMS: 15,
     commonWireVersion: null } }

有人可以幫我找出我做錯了什么,以便我可以繼續教程嗎? 感謝您的時間。

編輯:我認為添加另一個數據庫訪問帳戶不會解決問題,因為MongoDB 上的管理員帳戶具有讀取和寫入其數據庫的能力 我唯一能想到的可能阻止我的可能是我的諾頓防病毒軟件,盡管我不確定如何檢驗這個假設。

這是我如何使用mongoose的示例:

const connectToMongo = async () => {
  try {
    await mongoose.connect(mongoUrl, { useNewUrlParser: true });
    console.log('connected to MongoDB');
  } catch(error) {
    console.log('error connection to MongoDB:', error.message);
  }
};

這是mongoUrl的示例: mongo+srv://username:password@cluster0-ipl5c.mongodb.net/collectionname?retryWrites=true

確保您創建了一個用戶來讀取和寫入不是管理員帳戶的數據庫。 您從“連接”按鈕獲得的 URI 字符串可能使用管理員帳戶,即使這不是您要在 URI 字符串中使用的帳戶,因此請記住這一點。 如果您這樣做了但仍然無法連接,請使用此清單:

數據庫訪問管理

網絡訪問管理

集群和集合

嘗試在選項中添加dbName

await mongoose.connect('mongodb://root:example@mongo:27017', { dbName: "blog" });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM