javascript - 使用 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);
}
);
});
解决方案
所以你需要改变:
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
承诺已经resolve
与open
事件一起发生。您应该配置重新连接
推荐阅读
- asp.net - 如何从后面的代码中添加 DnnCssInclude?
- python-3.x - 尽管安装了构建工具,但 Pyshark 安装仍然无法满足 Visual C++ 的要求。
- windows - 如何停止 Service Fabric 进程?
- vba - Excel VBA - 比较两个工作簿中的两个数组
- javascript - 在 setState 之后立即将状态传递给另一个组件
- node.js - 如何找出 nodejs 版本支持哪个版本的 angular-cli?
- reactjs - 如何在 Mapbox 地图上添加固定标记?(反应)
- sql - 在 SQL Server 表插入上调用 Curl 的最佳实践?
- html - 在 Ionic 3 上上传照片
- rasa-nlu - Rasa - 无法加载任何代理模型