首页 > 解决方案 > 这个 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 块是否只处理我们抛出的错误?

标签: javascriptnode.jsexpress

解决方案


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();

推荐阅读