无法使用 mongoose 连接到 mongodb 数据库

Posted

技术标签:

【中文标题】无法使用 mongoose 连接到 mongodb 数据库【英文标题】:Cant connect to mongodb database using mongoose 【发布时间】:2020-12-28 03:33:46 【问题描述】:

嘿,所以我有一个学校作业,要求我使用 mongoose 和 koa 连接到 mongodb 数据库。我在 Docker 上设置了我的数据库,我可以通过 mongodb Compass 访问它,所以应该没问题。但是当我尝试使用 mongoose 时,我在 docker 显示屏上收到一条错误消息。

我的代码:

server.js

const Koa = require('koa');
const mongoose = require('mongoose');

const router = require('./routes');


const app = new Koa();
app.use(require('koa-body')());
app.use(router.routes());

mongoose.connect(process.env.MONGODB_URI,  useNewUrlParser: true, useUnifiedTopology: true )
    .then(() => 
        const listener = app.listen(process.env.APP_PORT || 3000, () =>
            console.log('App started on port ' + listener.address().port)
        )
    )
    .catch((error) => 
        console.log(error)
        process.exit(1)
    )

//    app.proxy = true;
module.exports = app;

docker-compose.yml

mongodb:
    image: 'mongo:4.4.0'
    command: '--auth'
    container_name: mongodb_container
    volumes:
      - './data/mongo:/data/db:delegated'
    ports:
      - '27017:27017'
    environment: 
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example
      MONGO_INITDB_DATABASE: database1

  node-service-two:
    depends_on:
      - mongodb
    build:
      context: '../Test-II-node'
    ports:
      - '3000:3000'
    volumes:
      - '../Test-I-node:/home/node/app:delegated'
    environment:
      MONGODB_URI: mongodb://root:example@localhost:27017/two?authSource=admin
    command: 'run dev'

来自 package.json 的脚本


  "scripts": 
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node src/server.js",
    "dev": "nodemon src/server.js"
  

错误信息

[nodemon] starting `node src/server.js`

MongooseServerSelectionError: connect ECONNREFUSED 127.0.0.1:27017

at NativeConnection.Connection.openUri (/home/node/app/node_modules/mongoose/lib/connection.js:800:32)

at /home/node/app/node_modules/mongoose/lib/index.js:341:10

at /home/node/app/node_modules/mongoose/lib/helpers/promiseOrCallback.js:31:5

at new Promise (<anonymous>)

at promiseOrCallback (/home/node/app/node_modules/mongoose/lib/helpers/promiseOrCallback.js:30:10)

at Mongoose.connect (/home/node/app/node_modules/mongoose/lib/index.js:340:10)

at Object.<anonymous> (/home/node/app/src/server.js:11:10)

at Module._compile (internal/modules/cjs/loader.js:1075:30)

at Object.Module._extensions..js (internal/modules/cjs/loader.js:1096:10)

at Module.load (internal/modules/cjs/loader.js:940:32)

at Function.Module._load (internal/modules/cjs/loader.js:781:14)

at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)

at internal/main/run_main_module.js:17:47 

reason: TopologyDescription 

type: 'Single',

setName: null,

maxSetVersion: null,

maxElectionId: null,

servers: Map(1)  'localhost:27017' => [ServerDescription] ,

stale: false,

compatible: true,

compatibilityError: null,

logicalSessionTimeoutMinutes: null,

heartbeatFrequencyMS: 10000,

localThresholdMS: 15,

commonWireVersion: null




[nodemon] app crashed - waiting for file changes before starting...

我很确定它与 javascript 承诺有关,或者它找不到 mongodb url,但我无法查明问题所在。我还安装了所有必要的软件包。这是我第一次使用节点,所以任何帮助都会很棒。

【问题讨论】:

【参考方案1】:

使用 docker-compose 时,您必须记住每个服务都是自己的容器。当您的 Node.js 服务正在寻找 localhost 时,它正在寻找自己。

使用 docker-compose 中指定的服务名称在 MongoDB 容器中修复这一点:MONGODB_URI: mongodb://root:example@mongodb:27017/two?authSource=admin

【讨论】:

以上是关于无法使用 mongoose 连接到 mongodb 数据库的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Mongoose 连接到 MongoDB Atlas

节点/快速应用程序无法使用mongoose连接到Mongodb Atlas

无法将 Mongoose 连接到 Atlas

无法使用带有 X509 用户的 mongoose 连接到 Mongo DB

Mongoose 无法连接到 mLab 环境

Mongoose 无法连接到 mLab 环境