在 mongodb 连接 url 中将“useNewUrlParser”和“useUnifiedTopology”设置为 true,避免了 promise 函数中的 catch 块

Posted

技术标签:

【中文标题】在 mongodb 连接 url 中将“useNewUrlParser”和“useUnifiedTopology”设置为 true,避免了 promise 函数中的 catch 块【英文标题】:Setting "useNewUrlParser" & "useUnifiedTopology" to true in mongodb connection url, avoids the catch block in a promise function 【发布时间】:2021-01-09 13:38:17 【问题描述】:

在我的代码中,我使用了 mongoose 来建立一个 mongodb url 连接。为避免出现“DeprecationWarning”,我将“useNewUrlParser”、“useUnifiedTopology”、“useFindAndModify”、“useCreateIndex”设置为 true。

但是,这避免了 catch 块错误。 例如:如果我在我的 atlas url 中输入了错误的凭据,则此代码不会在控制台中显示错误。

const url = require('./setup/myUrl').mongoUrl

mongoose.set('useNewUrlParser', true);
mongoose.set('useFindAndModify', false);
mongoose.set('useCreateIndex', true);
mongoose.set('useUnifiedTopology', true);

mongoose
    .connect(url)
    .then(() => console.log('DB is connected...'))
    .catch(err => console.log(`Error: $err`));  

【问题讨论】:

【参考方案1】:

@Mehedi Hasan catch 块仅处理初始连接错误,要处理从 DB 发生的错误,您需要注册 db.on('error', () => ); 事件。

例如:

mongoose.connect(dbPath, 
    useNewUrlParser: true,
    useFindAndModify: false,
    useUnifiedTopology: true,
).catch((err) => 
    console.error(err.message); //Handles initial connection errors
    process.exit(1); // Exit process with failure
);

const db = mongoose.connection;
db.on('error', () => 
    console.log('> error occurred from the database');
);
db.once('open', () => 
    console.log('> successfully opened the database');
);
module.exports = mongoose;

【讨论】:

以上是关于在 mongodb 连接 url 中将“useNewUrlParser”和“useUnifiedTopology”设置为 true,避免了 promise 函数中的 catch 块的主要内容,如果未能解决你的问题,请参考以下文章

如何在Jmeter中将“嵌套”变量与字符串连接起来

使用私钥( file.pem )和没有 mongo_url 的用户连接外部 mongodb

在 Postgres 中将多个值链接在一起

NodeJS与mongoDB的连接错误

如何在 Docker 中将 Debezium 连接到 MongoDB?

Node.js 连接 MongoDB-7