Try Catch未正确处理错误



我有一个try-catch块,它应该捕获连接到Mongo数据库时遇到的任何错误,并返回状态"未经授权";。然而,Express在后端崩溃,尽管如果我关闭MongoDB引擎进行测试,我会处理错误。这些错误难道不应该正确处理吗?(到目前为止,我没有使用错误代码进行测试。(

app.post('/api/login', (req, res) => {
id = req.body.account
var query = {_id: id}
try {
db.collection("Users").findOne(query, (err, result) => {
if (result) {
nonce = noncef()
var upvalues = { $set: {nonce: nonce} }
db.collection("Users").updateOne(query, upvalues, (err, result) => {
if (result) {
res.send(`${nonce}`)
}
})
}
})
}
catch(err) {
res.status(401).send('Unauthorized')
}
})

.findOne.updateOne使用Promises而不是回调,然后可以await结果(并捕获它们(,或者将.catch链接到Promise链上。

app.post('/api/login', async (req, res) => {
const query = { _id: req.body.account }
try {
const user = await db.collection("Users").findOne(query);
if (!user) return;
const nonce = noncef();
const upvalues = { $set: { nonce } };
const updated = await db.collection("Users").updateOne(query, upvalues);
if (updated) res.send(nonce);
} catch (err) {
res.status(401).send('Unauthorized')
}
})

一般来说,在现代JavaScript中,在可能的情况下,您应该始终更喜欢promise而不是回调——promise使链接和捕获异步代码更加方便。

最新更新