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 连接

MongoDB可以连接MongoClient但不能连接mongoose

连接到 MongoDb Atlas 服务器时出错