首页 > 解决方案 > 使用 mongoose 连接到 mongoDB 的未处理的承诺拒绝警告

问题描述

所以我有这段代码(简化了一点)来连接数据库,我DATABASE_URL故意错了,所以我得到了一个错误。但我不明白的是我得到的原因UnhandledPromiseRejectionWarning

有任何想法吗?

干杯!

try {
    startServer();
} catch (err) {
    console.log(err);
}




async function startServer () {
    try {
        await connectToDatabase;
    } catch ( err ) {
        throw err;
    }
}

const connectToDatabase = new Promise((resolve, reject) => {
    mongoose.connect(
        process.env.DATABASE_URL,
        {
            useNewUrlParser: true,
            useUnifiedTopology: true,
        }
    );
    const database = mongoose.connection;
    database.on(
        'error',
        err => reject(err)
    );
    database.once(
        'open',
        () => {
            console.log('Connected to database...');
            resolve(database);
        }
    );
});


标签: javascriptnode.jsmongodbmongoose

解决方案


mongoose.connect返回一个承诺

所以你需要改变:

  const connectToDatabase = new Promise((resolve, reject) => {
    mongoose.connect(
      process.env.DATABASE_URL,
      {
        useNewUrlParser: true,
        useUnifiedTopology: true
      }
    )
      .then(() => {
        const database = mongoose.connection
       
        database.on('error', err => {
          logError(err);
        });
        database.once(
          'open',
          () => {
            console.log('Connected to database...')
            resolve(database)
          }
        )
      })
      .catch(reject)
  })

您应该改进此代码:

        database.on('error', err => {
          logError(err);
        });

因为一旦建立连接后出现错误,例如断开连接,就会触发此事件。

所以你不能reject承诺已经resolveopen事件一起发生。您应该配置重新连接


推荐阅读