嘿,所以我有一个学校作业,要求我用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,所以任何帮助都会很棒。
答案 0 :(得分:0)
使用docker-compose时,您必须记住每个服务都是其自己的容器。当您的Node.js服务正在寻找 localhost 时,它正在寻找自身。
要使用在docker-compose中指定的服务名称,在MongoDB容器上固定此点猫鼬:MONGODB_URI: mongodb://root:example@mongodb:27017/two?authSource=admin