You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB连接失败未被Promise捕获致应用崩溃问题求助

问题原因

你手动封装的Promise没有正确处理mongoose.connect本身抛出的Promise拒绝,导致认证失败时存在未被捕获的Promise异常,进而引发应用崩溃。mongoose.connect本身就返回标准Promise,无需手动重新封装。

解决方法

修改tryDB.js,直接使用mongoose.connect返回的Promise,移除手动创建的Promise逻辑:

const mongoose = require('mongoose');
require('dotenv').config();

const uri = process.env.MONGO_URI;

// 直接使用mongoose.connect返回的Promise,无需手动封装
const connection = mongoose.connect(uri)
  .then(() => {
    // 连接成功时返回数据库连接对象
    return mongoose.connection;
  });

module.exports = connection;

如果偏好async/await风格,也可以这么写:

const mongoose = require('mongoose');
require('dotenv').config();

const uri = process.env.MONGO_URI;

const getConnection = async () => {
  try {
    await mongoose.connect(uri);
    return mongoose.connection;
  } catch (error) {
    // 先做一层错误处理,再抛出让上层捕获
    throw error;
  }
};

module.exports = getConnection();

验证效果

修改后,使用错误密码时,认证失败的错误会被tryCtrl.js中的.catch()正常捕获,不会导致应用崩溃,错误信息会被正常打印到控制台。

额外说明

  • 新版本Mongoose(v6+)已默认启用useNewUrlParser、useUnifiedTopology等必要选项,无需手动添加;若使用旧版本,建议在mongoose.connect中补充这些参数:
    mongoose.connect(uri, {
      useNewUrlParser: true,
      useUnifiedTopology: true
    })
    
  • 避免手动封装Promise处理Mongoose连接,官方提供的Promise已覆盖所有连接错误场景,包括认证失败、网络问题等。

内容的提问来源于stack exchange,提问作者forstack overflowizi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 03:57:41