您应该向用户发送数据库错误吗?

时间:2017-06-24 04:31:46

标签: node.js mongodb express mongoose error-handling

在我写的NodeJS / MongoDB服务器中,我有很多API调用来存储用户以及数据库中的诸如此类的东西。 Mongoose调用了MongoDB,它在执行查询后将返回一个带有错误(如果有)和文档(如果有一个要返回)的回调函数。

我想知道是否应该将错误发送给用户,抛出它(停止整个服务器),或者只发送500错误。

示例:

b = a;  // b basically referring to memory used by array a
a = c;  // reference pointed by a has changed, but b is still referring the old array a

我应该选择哪个?

1 个答案:

答案 0 :(得分:1)

首先,您必须确定您的服务器或数据库是否存在灾难性问题。如果是这样,那么您可能至少需要一些管理员注意,甚至可能需要重新启动服务器,并且您应确保已对某些内容进行编码以识别该情况,并通知需要知道或采取某些明确行动的人员。这对您的运营团队来说都是内部负责您的网站 - 与最终用户无关。

例如,如果您的代码在进行查询之前打开了与数据库的连接,并且您甚至无法与它建立连接,那么就会出现严重错误,而不是延迟一点并且重试,你的代码无法做任何其他事情,但要确保有人通知谁可以试图找出为什么不再与数据库建立连接。

然后,我见过的最佳做法是以专业的方式与最终用户沟通以下内容:

  1. 服务器上发生意外错误的事实。
  2. 最终用户可以做些什么(如果有的话)。例如,如果这是一个API查询,那么您可以提供有关可能不会导致此问题的更安全查询的建议。
  3. 某种与此特定错误情况唯一对应的代码。虽然这不是非常用户友好的,并且永远不应该是主要的错误反馈,但是拥有这样的代码使得特定错误的报告更容易让TON一直回到开发人员而不会被破坏,并且给开发人员足够的信息,他们可能会看到导致此错误的代码路径。例如" ErrorCode:901"。如果您的代码中只有一个位置可能会产生错误901,那么开发人员可以立即知道他们的代码中的哪个位置可以查看或测试,以查看导致此问题的原因。

  4. 是否需要报告此问题。如果您的内部系统已经记录并报告了该问题,并且可能会自动将其引起别人的注意,那么您可以告诉用户这已经完成,他们不需要打电话或发送电子邮件报告它。如果没有,那么您甚至可以要求他们报告,以便您可以听到它并知道某些东西不起作用。