你应该发送DB错误给用户吗?

在我写的NodeJS / MongoDB服务器中,我有很多的API调用来存储用户和数据库中的内容。 Mongoose已经调用了MongoDB,在查询之后,它将返回一个带有错误(如果有的话)和一个文档(如果有一个返回的)的callback函数。

我想知道如果我应该把错误发送给用户,扔它(停止整个服务器),或只发送500错误。

例:

accountDocument.save(function (err, account) { if (err){ res.status(500).json(err); // Option 1 - sends DB error to user res.status(500).end(); // Option 2 - just notifies there was a problem throw err; // Option 3 - stops the server completely } else res.status(200).json(account); }); 

我应该select哪一个?

首先,您必须确定您的服务器或数据库是否有灾难性的错误。 如果是这样,那么你可能需要至less一些pipe理员的关注,甚至可能重启服务器,你应该确保你已经编写了一些东西来识别这种情况,并通知谁需要知道或采取一些明确的行动。 这对于你的网站负责的操作团队是内部的 – 与最终用户无关。

例如,如果您的代码在进行查询之前打开了与数据库的连接,并且甚至无法连接到该数据库,那么出现了严重的错误,而且延迟了一段时间,然后重试,除此之外,没有任何其他代码可以执行这样做,但要确保有人知道谁可以尝试找出为什么没有连接到数据库了。

然后,我所看到的最佳做法是以专业的方式向最终用户反馈以下信息:

  1. 服务器发生意外错误的事实。
  2. 最终用户可以做些什么(如果有的话)。 例如,如果这是一个API查询,那么也许你可以提供一个安全的查询,可能不会导致这个问题的意见。
  3. 某种types的代码,唯一对应于这个特定的错误情况。 虽然这不是非常用户友好,不应该是主要的错误反馈,有这样的代码使得一个TON更容易的一个特定的错误的报告一路回到开发商没有得到改变,并给予开发人员足够的信息,他们可能会看到什么代码path导致这个错误。 例如“ErrorCode:901”。 如果代码中只有一个地方可能会产生错误901,那么开发人员可以立即知道在代码中的哪个位置去查看或testing,看看是什么原因造成的。

  4. 是否需要报告这个问题。 如果您的内部系统已经logging并报告了问题,并且可能会自动引起用户的注意,那么您可以告诉用户这已经完成了,他们不需要打电话或者通过电子邮件报告。 如果没有,那么你甚至可以要求他们报告,这样你就可以听到它,知道有什么不工作。