无法使用 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