MongoDB Mongoose 连接数据库时出错
Posted
技术标签:
【中文标题】MongoDB Mongoose 连接数据库时出错【英文标题】:MongoDB Mongoose error when connecting to the database 【发布时间】:2020-09-08 12:47:00 【问题描述】:我在使用 Mongoose 连接到 MongoDB 数据库时遇到了问题。我正在使用 node js 和 express。
这是错误:
Error: queryTxt ESERVFAIL busines-s-registration-npeym.mongodb.net
(node:66755) UnhandledPromiseRejectionWarning: Error: queryTxt ESERVFAIL busines-s-registration-npeym.mongodb.net
at QueryReqWrap.onresolve [as oncomplete] (dns.js:206:19)
(node:66755) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error
originated either by throwing inside of an async function without a catch block, or by rejecting
a promise which was not handled with .catch(). To terminate the node process on unhandled
promise rejection, use the CLI flag `--unhandled-rejections=strict` (see
https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
我认为主要的错误是:
Error: queryTxt ESERVFAIL busines-s-registration-npeym.mongodb.net
我的代码:
const express = require("express");
const app = express();
const Schema = require("./Schema");
const mongoose = require("mongoose");
const port = process.env.PORT || 4000;
mongoose.connect(
"mongodb+srv://<username>:<password>@busines-s-registration-npeym.mongodb.net/test?retryWrites=true&w=majority",
useNewUrlParser: true, useUnifiedTopology: true
);
mongoose.connection.on("connected", function ()
console.info("Connected!\n\n");
);
mongoose.connection.on("error", function (err)
console.error(`ERROR!!! The error is: $err\n\n`); // error is consoled here
);
mongoose.connection.on("disconnected", function ()
console.warn(
"The connection has been lost. This is because it got disconnected.\n\n"
);
);
app.listen(port, () =>
console.log(`Listening on port $port!`);
);
我不知道为什么会突然发生这种情况。如果你能帮忙,谢谢!
【问题讨论】:
【参考方案1】:经过一番研究,滚动浏览堆栈溢出,我终于找到了解决方案。
来自堆栈溢出的 JOSEPH KASULE 的功劳:Thanks!
回答链接:How to fix 'Error: querySrv EREFUSED' when connecting to MongoDB Atlas?
向下滚动到正确答案以找到它。
事实证明,我必须使用较旧的连接方法进行连接。我必须选择 2.2.12 或更高版本的节点版本:
我必须使用旧版本的连接:
而不是这个:
mongodb+srv://<username>:<password>@busines-s-registration-npeym.mongodb.net/test?retryWrites=true&w=majority
我不得不使用这个:
mongodb://<username>:<password>@busines-s-registration-shard-00-00-npeym.mongodb.net:27017,busines-s-registration-shard-00-01-npeym.mongodb.net:27017,busines-s-registration-shard-00-02-npeym.mongodb.net:27017/test?ssl=true&replicaSet=BusinessRegistration-shard-0&authSource=admin&retryWrites=true&w=majority
当使用 mongoose 连接到 Mongo DB 时。
原因是根据 Mongo DB 的说法,由于 Mongoose,SRV 无法正常工作。
【讨论】:
以上是关于MongoDB Mongoose 连接数据库时出错的主要内容,如果未能解决你的问题,请参考以下文章
使用 geojson 和 mongoose 将多边形坐标插入 Mongo DB 时出错
NestJs / Mongoose 在 Docker 撰写时无法建立 MongoDB 数据库连接
无法使用 nestjs/mongoose 连接 mongoDB
将 apollo 服务器与 mongodb mongoose 连接