【问题标题】:Node.js: Should I discard request on error?Node.js:我应该在错误时丢弃请求吗?
【发布时间】:2014-08-22 13:26:30
【问题描述】:

当我使用 Node.js 构建服务器时。请求有时会失败。例如,解析 POST 数据时可能会出错。发生任何错误时:

  • 我是否应该继续处理请求并冒一些 POST 数据可能损坏或丢失的风险并像什么都没发生一样响应(或响应并通知用户发生了一些错误)?

  • 尝试重新解析 POST 数据(如果失败了 3 次,则停止尝试,将错误添加到错误日志并向用户显示错误页面)?

  • 立即停止请求处理并抛出 500 错误?

最好的方法是什么?

【问题讨论】:

  • 重新解析帖子数据有什么帮助?你有你所拥有的数据。
  • 有可能,当这些数据正在加载和解析时,在(部分之间)之间运行了其他东西,并对变量做了一些事情,......,这把它搞砸了。因此,第二次解析它可能会有所帮助。
  • 你有一个在请求处理过程中任意修改请求参数的系统?!
  • 不,但是,在接收数据时,线程可能被代码的其他部分使用,这可能会不小心弄乱一些变量。这就是我认为重试可行的原因。
  • 所以你说尝试参数解析几次是合理的,因为你部署了一个可能以任意方式搞砸任意请求的病态系统?您是否将冗余构建到代码库的各个方面?!

标签: node.js error-handling


【解决方案1】:

在这种情况下要问自己的关键问题是 IMO:

  1. 我知道错误发生的原因吗?
  2. 我可以从中恢复吗?

答案完全取决于您的应用程序。通常,只有在您可以期待下一次尝试的不同结果时,重试才有意义。这通常适用于与外部系统集成时的各种意外错误。另一方面,如果您收到的错误清楚地表明它收到了例如一个错误的请求,或者一个文件不存在,那么无论你重试多少次相同的操作,这可能都不会改变。

如果您的业务规则允许您在完全忽略错误的情况下继续操作,请执行此操作。如果您的业务规则允许您部分执行请求并且您能够报告部分失败 - 然后这样做。如果错误阻止了对请求的任何处理,那么您必须终止它并向用户报告。

在我看来,你有一个特殊的情况,所以让我来解决请求正文重新解析。在适当的系统中,这样做应该完全没有意义 - 如果您期望不同的结果,那么您的设置存在根本性错误,因为请求的主体一旦收到就不应更改强>。您的应用程序不应以任何方式修改请求数据。

作为更一般的规则 - 如果您预计应用程序中可能会发生意外情况,但您不知道何时、为什么或如何,则说明应用程序的结构/执行方式存在问题。您应该拥有自己的代码并且确切地知道它的作用。

【讨论】:

  • 我意识到这是一个非常古老的问题,但我感觉就像先生。戴夫对这个似乎是新手的问题的反应有点过于严厉,因为我偶然发现了这篇文章,所以我决定回答它。希望这对将来的某人有所帮助:]
猜你喜欢
  • 1970-01-01
  • 2013-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-13
  • 1970-01-01
  • 2018-10-04
  • 2011-11-19
相关资源
最近更新 更多