无法使用猫鼬连接到mongodb数据库

问题描述

嘿,所以我有一个学校作业,要求我用mongoose和koa连接到mongodb数据库。我在Docker上建立了数据库,我可以通过mongodb Compass访问它,所以应该可以。但是当我尝试使用猫鼬时,我在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 Promise有关,或者它找不到mongodb url,但我无法查明问题。我还安装了所有必需的软件包。这是我第一次使用node,所以任何帮助都会很棒。

解决方法

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

要使用在docker-compose中指定的服务名称,在MongoDB容器上固定此点猫鼬:MONGODB_URI: mongodb://root:example@mongodb:27017/two?authSource=admin

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...