【问题标题】:Should you send DB errors to the user?你应该向用户发送数据库错误吗?
【发布时间】:2017-06-24 04:31:45
【问题描述】:

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

我想知道是否应该将错误发送给用户,将其抛出(停止整个服务器),或者只是发送 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);
  });

我应该选择做什么?

【问题讨论】:

  • REST API error return good practices 的可能副本,由于主要基于意见而被关闭,就像这个问题本质上一样。
  • @NeilLunn 是和否......关于返回哪个代码的内容很多,我已经知道我将返回 500。问题是我是否应该将错误发送为好吧,或者只是停止服务器。
  • 为什么要停止服务器?这意味着它将停止为所有其他用户工作
  • @MariaInesParnisari 不确定,不知道这是否是好的做法,听起来好像不是。所以,现在只需要发送一个带有错误的 500 即可。想法?

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


【解决方案1】:

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

例如,如果您的代码在进行查询之前打开了与数据库的连接,而您甚至无法获得与它的连接,那么就存在严重错误,除了延迟一点并重试之外,没有别的了您的代码可以执行此操作,但要确保有人收到通知,可以尝试找出无法再连接到数据库的原因。

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

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

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

【讨论】:

    猜你喜欢
    • 2021-05-29
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 2017-07-26
    • 1970-01-01
    相关资源
    最近更新 更多