Javascript 从数据库获取数据时处理null

Javascript 从数据库获取数据时处理null,javascript,Javascript,当你没有得到你想要的东西时,在哪里抛出异常是最好的 当我在服务层这样做时 async function placeOrder(userId: number, productId: number): void { const user = await userRepository.findById(userId) if(!user) throw new NotFoundError('user not found') const product = await productRepo

当你没有得到你想要的东西时,在哪里抛出异常是最好的

当我在服务层这样做时

async function placeOrder(userId: number, productId: number): void {

  const user = await userRepository.findById(userId)
  if(!user) throw new NotFoundError('user not found')

  const product = await productRepository.findById(productId)
  if(!product) throw new NotFoundError('product not found')

  ...
  ...
}
我有多个if语句,这不利于可读性,如果我需要获得许多不同的资源,情况会变得更糟。尽管当我得到一个异常时它是明确的

我想知道存储库抛出一个错误,比如

async findById(userId: number, options?: {required?: boolean}): User {

  const user = await User.findById(userId)
  if(options && options.required && !user) throw new NotFoundError('user not found')
  return user

}

如果(!item),我的代码应该清楚地知道什么时候在服务层出现异常,还是应该减少
的数量?

像这样的问题很难回答,但根据我的经验,异常应该始终在服务层进行管理。您希望将所有业务逻辑放在一个位置。话虽如此,当涉及到无法找到记录的情况时,我发现VLAZ的评论非常恰当。如果给定某些参数,则无法找到记录或记录列表,应在控制器上或直接在视图上进行管理

现在,尽管它可能非常冗长,但我始终建议使用异常。最好使用异常来处理错误。因此,在本例中,如果需要进行多次检查,并不意味着可读性降低,但这将有助于维护应用程序,因为用户将对给定操作中出现的错误有更详细的解释


所以,继续使用您想要的尽可能多的异常,但只在错误时使用它们,而不在常见情况下使用它们,例如在给定查询中找不到记录,就像VLAZ提到的那样

像这样的问题很难回答,但根据我的经验,异常应该始终在服务层进行管理。您希望将所有业务逻辑放在一个位置。话虽如此,当涉及到无法找到记录的情况时,我发现VLAZ的评论非常恰当。如果给定某些参数,则无法找到记录或记录列表,应在控制器上或直接在视图上进行管理

现在,尽管它可能非常冗长,但我始终建议使用异常。最好使用异常来处理错误。因此,在本例中,如果需要进行多次检查,并不意味着可读性降低,但这将有助于维护应用程序,因为用户将对给定操作中出现的错误有更详细的解释


所以,继续使用您想要的尽可能多的异常,但只在错误时使用它们,而不在常见情况下使用它们,例如在给定查询中找不到记录,就像VLAZ提到的那样

我确实非常喜欢你。我认为这是控制要在前端显示哪些错误的最佳方法。

我非常喜欢u。我认为这是控制要在前端显示哪些错误的最佳方法。

如果找不到用户,我不会在
findById
之类的东西中抛出异常,因为它没有那么大的错误。在许多情况下,这可能是好的,你甚至可以用它来检查不同的东西,所以没有找到的记录不是你必须发出警报的东西。在类似于
placeOrder
的情况下,这可能是一种错误情况。例如,不存在的用户可能不应该下订单。虽然这可能仍然是一件正常的事情,您可以以某种形式返回成功状态。例外情况应该是……嗯,例外情况。@VLAZ谢谢你的评论。是的,这是有道理的。通常,
findById
返回null并不是一个“异常”情况。如果找不到用户,我不会在类似
findById
的情况下抛出异常,因为它没有那么大的错误。在许多情况下,这可能是好的,你甚至可以用它来检查不同的东西,所以没有找到的记录不是你必须发出警报的东西。在类似于
placeOrder
的情况下,这可能是一种错误情况。例如,不存在的用户可能不应该下订单。虽然这可能仍然是一件正常的事情,您可以以某种形式返回成功状态。例外情况应该是……嗯,例外情况。@VLAZ谢谢你的评论。是的,这是有道理的。通常,
findById
返回null并不属于“例外”情况。谢谢您的评论。我通常在服务层抛出异常,但在我目前正在处理的项目中,我需要4-5个资源来执行特定任务。然后很多“如果然后抛出”的块有点难读,我不确定这是一个好的做法。但我同意这样的观点,用户将获得更多的信息。我会坚持下去。谢谢你的评论。我通常在服务层抛出异常,但在我目前正在处理的项目中,我需要4-5个资源来执行特定任务。然后很多“如果然后抛出”的块有点难读,我不确定这是一个好的做法。但我同意这样的观点,用户将获得更多的信息。我会坚持下去。