Node.js:我应该在出现错误时放弃请求吗?

Node.js:我应该在出现错误时放弃请求吗?,node.js,error-handling,Node.js,Error Handling,当我使用Node.js构建服务器时。请求有时会失败。例如,解析POST数据时可能会出错。发生任何错误时: 我是否应该继续处理请求,并承担一些POST数据可能已损坏或丢失的风险,并像什么都没有发生一样进行响应,或者响应并通知用户发生了错误 尝试重新分析POST数据,如果失败了,比如说3次,停止尝试,将错误添加到错误日志并向用户显示错误页面 立即停止请求处理并抛出500错误 最好的方法是什么?在这种情况下,要问自己的关键问题是: 我是否知道错误发生的原因; 我能从中恢复过来吗? 答案完全取决于你的申

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

我是否应该继续处理请求,并承担一些POST数据可能已损坏或丢失的风险,并像什么都没有发生一样进行响应,或者响应并通知用户发生了错误

尝试重新分析POST数据,如果失败了,比如说3次,停止尝试,将错误添加到错误日志并向用户显示错误页面

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


最好的方法是什么?

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

我是否知道错误发生的原因; 我能从中恢复过来吗? 答案完全取决于你的申请。一般来说,只有在下次尝试时可以预期不同的结果时,重试才有意义。这通常适用于与外部系统集成时出现的各种意外错误。另一方面,如果您收到的错误清楚地表明它收到了错误请求,或者文件不存在,那么无论您重试同一操作多少次,这可能都不会改变

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

在我看来,您心里似乎有一个特定的情况,所以让我来重新解析请求体。在一个合适的系统中,这样做应该是毫无意义的——如果您期望不同的结果,那么您的设置就有根本性的错误,因为请求的主体在收到请求后不应该改变。应用程序不应以任何方式修改请求数据


一般来说,如果您预期应用程序中可能会发生意外情况,但不知道什么时候、为什么或如何发生,那么应用程序的结构/执行方式就有问题。您应该拥有自己的代码,并确切知道它的功能。

重新解析post数据有什么帮助?你有你所拥有的数据。有可能,当这些数据被加载和解析时,其他的东西在部分之间运行,并且用变量做了一些事情,这把事情搞砸了。所以,第二次解析可能会有所帮助。你有一个系统,可以在请求处理过程中任意修改请求参数?!不,但是,在接收数据时,线程可能会被代码的其他部分使用,这可能会意外地弄乱一些变量。这就是为什么我认为重试是可行的。那么你是说尝试几次参数解析是合理的,因为你部署了一个病态的系统,它可能以任意方式破坏任意请求?你在代码库的各个方面都建立了冗余吗?!我意识到这是一个非常古老的问题,但我觉得戴夫先生对一个似乎是新手的问题反应有点过于严厉,因为我偶然发现了这篇文章,我决定回答它。希望这对将来的人有所帮助:]