node.js - 您应该向用户发送数据库错误吗?

标签 node.js mongodb express mongoose error-handling

在我正在编写的 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);
  });

我应该选择做什么?

最佳答案

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

例如,如果您的代码在执行查询之前打开与数据库的连接,而您甚至无法与其建立连接,那么就会出现严重错误,除了延迟一下并重试之外,没有其他方法您的代码可以做到这一点,但要确保有人收到通知,可以尝试找出不再连接到数据库的原因。

然后,我见过的最佳实践是以专业的方式向最终用户传达以下信息:

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

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

关于node.js - 您应该向用户发送数据库错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44732768/

相关文章:

javascript - 如何在 Nodejs/Expressjs 中将多个请求分开

reactjs - react 路由器4和表达: cannot GET

javascript - 尝试读取文本文件 (.txt) 并在 onclick 按钮模式对话框中显示文本文件上的文本

windows下的Mongodb安装路径

javascript - 在让客户端输入另一条消息之前等待服务器响应

node.js - 通过在 body、mongoose/mongodb 中提供文档来更新多个文档

java - mongodb 与 java 中的 where 子句不同

node.js - 当我通过 Express 发送 json 对象时,浏览器不显示选项卡 "raw | parsed"

node.js - 快速验证未产生正确的错误

node.js - 在本地运行 Cloud Functions 会出现错误 "functions.config() is not available"