Javascript 我的这两段代码在功能上有什么不同吗?第二种方法是否与第一种方法处理可能的错误相同?
早些时候,我问了一个关于堆栈溢出的问题,一位善良的用户建议对我的代码进行一些改进,这看起来很不错,所以我开始检查我的代码以实现这些更改。问题是,我不确定我的返工代码是否以与第一次相同的方式处理可能的错误 以下是我当前的代码:Javascript 我的这两段代码在功能上有什么不同吗?第二种方法是否与第一种方法处理可能的错误相同?,javascript,node.js,express,Javascript,Node.js,Express,早些时候,我问了一个关于堆栈溢出的问题,一位善良的用户建议对我的代码进行一些改进,这看起来很不错,所以我开始检查我的代码以实现这些更改。问题是,我不确定我的返工代码是否以与第一次相同的方式处理可能的错误 以下是我当前的代码: module.exports.deleteBrand = async (req, res, next) => { let brandId = req.body.brandId let brand try { brand = a
module.exports.deleteBrand = async (req, res, next) => {
let brandId = req.body.brandId
let brand
try {
brand = await Brand.destroy({
where: {
id: brandId
}
})
} catch (e) {
console.log(e)
}
if (brand) {
res.status(200).json({
brand: brand
})
} else {
res.status(500)
}
}
这就是我打算重做的方式:
module.exports.deleteBrand = async (req, res, next) => {
let brandId = req.body.brandId
try {
let brand = await Brand.destroy({
where: {
id: brandId
}
})
res.status(200).json({
brand: brand
})
} catch (e) {
console.log(e)
res.status(500)
}
}
如您所见,在我的第一个代码片段中,try-catch
块仅围绕我的数据库查询,然后我检查数据库查询在try-catch
之外是否成功,如果成功,则仅发送200状态
响应。否则,我将发送一个500状态
考虑到如果数据库查询失败,错误将被catch块捕获,我的
if else
在该场景中是否无用?返回500状态的代码是否应该放在catch块中?在错误处理方面有一点不同,是的,但如果有什么不同的话,这似乎是一种改进。区别在于:
- 在第一个示例中,从数据库成功检索
后,brand
引发的错误不会被捕获并终止res.status(200).json({brand:brand})
deleteBrand
- 在第二个示例中,捕获该错误并导致调用
块中的catch
res.status(500)
json({brand:brand})
如果brand
有任何循环引用,因此无法转换为json,则可能会抛出错误。在这种情况下,您的res.status(500)
将覆盖以前的res.status(200)
(假设尚未发送响应头,这可能是正确的假设)
旁注:您使用的是ES2015+代码,这意味着您可以使用速记属性表示法并将
.json({brand:brand})
更改为.json({brand})
我看不出有任何额外的必要,否则,只需尝试catch就足够了400(无效ID)、404(找不到ID)、403(无法访问)和其他可能的REST错误如何?你打算如何处理这些问题?@georg我还有一个中间件,可以在用户未经身份验证或令牌无效时处理错误,但除此之外,我没有其他任何东西。错误处理似乎是一个如此广泛的主题,有如此多的可能的错误,我甚至可能无法预见。