javascript - 这个 try-catch 块处理什么样的错误?
问题描述
//mongoose connection function
const connectDB = (url) => {
return mongoose.connect(url, {
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(() => console.log('Connected to database'))
.catch(err=>console.log(`DB CONNECTION ERR ${err}`))
}
const port = process.env.PORT || 5000
const mongoURI = process.env.MONGO_URI
//start
const start = async () => {
try {
await connectDB(mongoURI)
app.listen(port, () => console.log(`Server running at ${port}`))
} catch (error) {
console.log(error);
}
}
start()
这是我的基本服务器设置。我也尝试弄乱猫鼬连接设置和 app.listen() 但 catch 块(在 try-catch 中)没有处理任何事情。catch 块是否只处理我们抛出的错误?
解决方案
try
/catch
不处理任何事情,因为您阻止它在以下代码中看到错误connectDB
:
.catch(err=>console.log(`DB CONNECTION ERR ${err}`))
undefined
这将拒绝转换为具有值(的返回值)的履行console.log
。
正如您应该避免过早捕获异常一样,您应该避免过早处理拒绝。如果您async
在可能的情况下始终使用函数,那是最简单的(恕我直言):
const connectDB = async (url) => { // *** Make it an `async` function
await mongoose.connect(url, { // *** Await connection
useNewUrlParser: true,
useUnifiedTopology: true
});
console.log('Connected to database'); // *** Connection worked
};
const port = process.env.PORT || 5000;
const mongoURI = process.env.MONGO_URI;
//start
const start = async () => {
try {
await connectDB(mongoURI); // ** Now you'll see errors here
app.listen(port, () => console.log(`Server running at ${port}`));
} catch (error) {
console.log(error);
}
};
start();
推荐阅读
- mysql - Spring Boot API 使用 AWS RDS MySQL 需要很长时间(使用具有一对多关系的实体)
- python - mysql.connector.errors.ProgrammingError: 1064 (42000): 尝试创建表时 SQL 语法有错误
- javascript - 显示来自 fetch api 的数据
- r - R Shiny/Leaflet 跳转到过滤标记
- reactjs - 使用来自 python lambda 的预签名 url 将图像上传到 s3
- swiftui - SwiftUI - 删除具有 PageViewStyle 的 TabView 之间的空间
- ipfs - 如何正确配置 IPFS 的 DNS 链接?
- laravel - 如何将数组值一一传入邮件类
- kotlin - 如何在 kotlin 的 onCreate 函数中预定义 Volley.newRequestQueue 类型和后期初始化
- html - “无法绑定到‘ngForOf’,因为它不是‘ng-container’的已知属性