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我还有一个中间件,可以在用户未经身份验证或令牌无效时处理错误,但除此之外,我没有其他任何东西。错误处理似乎是一个如此广泛的主题,有如此多的可能的错误,我甚至可能无法预见。