簡體   English   中英

Mongoose nodejs - 身份驗證失敗嘗試連接到 mongodb docker

[英]Mongoose nodejs - authentication failed trying to connect to mongodb docker

我正在嘗試使用 mongoose 連接到 mongodb 容器。這是我的docker-compose

version: "3"

networks:
  mongonet:

services:
  mongodatabase:
    image: mongo
    container_name: mongodatabase
    ports:
      - 27017:27017
    environment:
      - MONGO_INITDB_DATABASE=admin
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=root
    networks:
      - mongonet
  mongojs:
    depends_on:
      mongodatabase:
        condition: service_started
    container_name: mongojs
    build: .
    ports:
      - 8080:8080
    environment:
      - MONGO_URI=mongodb://mongodatabase:27017/test
    networks:
      - mongonet

容器啟動正常,但使用mongoose時出現問題:

const mongoose = requrie('mongoose')
const {MONGO_URI} = require('./../config/env')


exports.__mongo_ini = async function () {
  const connectOptions = {
    useNewUrlParser: true,
    useUnifiedTopology: true,
  }

  try {
    await mongoose.connect(MONGO_URI, connectOptions)
    console.info(`===> Connected to database ${MONGO_URI}`)
  }
  catch(err) {
    console.warn(`===> Couldn't connect: ${err}`)
  }
}

當使用 env URI mongodb://mongodatabase:27017/test它表示已連接。 但是如果我試圖找到一個 model:

await models.Star.find().catch(r => r)

我收到錯誤:

MongoServerError: command find requires authentication
at Connection.onMessage (/usr/src/app/node_modules/mongodb/lib/cmap/connection.js:203:30)
at MessageStream.<anonymous> (/usr/src/app/node_modules/mongodb/lib/cmap/connection.js:63:60)
....
ok: 0,
code: 13,
codeName: 'Unauthorized',
[Symbol(errorLabels)]: Set(0) {}
}

我的model:

const starSchema = new mongoose.Schema({
    starName: {
        type: String,
        unique: true,
        required: true
    },
    image: {
        type: String
    },
    designation: {
        type: String
    },
    constelation: {
        type: String
    },
    named: {
        type: Date
    },
    timeStamp: {
        type: Date,
        default: Date.now()
    }
})

const Star = mongoose.model('Star',starSchema)

module.exports = Star

試圖在我的 docker 撰寫中添加一個 mongo 入口點卷:

volumes:
      - ./mongo-entrypoint/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro

Mongo-init.js:

db.getSiblingDB('admin').createUser({
    user: 'testuser',
    pwd: 'testpass',
    roles: [
        {
            role: 'readWrite',
            db: 'test'
        }
    ]
})
db.getSiblingDB('test').createCollection('collection_test');

所以我嘗試連接更改 mongo uri 以使用用戶和密碼:

MONGO_URI=mongodb://testuser:testpass@mongodatabase:27017/test

但它說在嘗試連接到 mongo uri 時身份驗證失敗並且 mongo 入口點似乎沒有運行:

Couldn't connect: MongoServerError: Authentication failed.

我嘗試了很多東西,但沒有一個起作用。 感謝所有幫助。

在 node.js 中嘗試此代碼

數據庫.js

require("dotenv").config();
const mongoose = require("mongoose");
const connectDB = async () => {
  try {
    await mongoose.connect(process.env.MONGO_URI, {
      useNewUrlParser: true,
      useUnifiedTopology: true,
    });
    console.log("MongoDB connection SUCCESS");
  } catch (error) {
    console.error("MongoDB connection FAIL");
  }
};
module.exports = connectDB;

.env

MONGO_URI=your_mongodb_url

創建模型文件 models.js

const mongoose = require("mongoose");

    const CategorysSchema = new mongoose.Schema({
      description: {
        type: String,
        lowercase: true,
      },
      name: {
        type: String,
        lowercase: true,
      },
      publishedAt: {
        type: Date,
        default: Date.now,
      },
    });
    
 module.exports = mongoose.model("categorys_collection", CategorysSchema);

查找模型

const Category_Model = require("./models");
    app.get("/", async (req, res) => {
      try {
        const Category = await Category_Model.find();
        res.json(Category);
      } catch (error) {
        res.status(500).json({ message: error.message, status: "error" });
      }
    });

暫無
暫無

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

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