Javascript HTTP响应流是否需要Node.js中的错误事件处理程序?

Javascript HTTP响应流是否需要Node.js中的错误事件处理程序?,javascript,node.js,marblejs,Javascript,Node.js,Marblejs,我尝试了很多实验,但我无法让HTTPOutgoingMessage触发错误事件。但我知道,OutgoingMessage基本上是一个writeablestream,因此容易出错 另外,当我阅读这篇官方文章时,建议处理响应流中的错误 如果是,什么情况会导致触发错误事件?我应该默默地接受这些错误吗?在NodeJ中,流或任何东西都不需要处理错误,但这是一种很好的做法。甚至还有一个概念:error first callbacks在NodeJS中,回调中的第一个参数实际上是一个error对象 让我们想象一

我尝试了很多实验,但我无法让HTTP
OutgoingMessage
触发
错误
事件。但我知道,
OutgoingMessage
基本上是一个
writeablestream
,因此容易出错

另外,当我阅读这篇官方文章时,建议处理响应流中的错误


如果是,什么情况会导致触发
错误
事件?我应该默默地接受这些错误吗?

在NodeJ中,流或任何东西都不需要处理错误,但这是一种很好的做法。甚至还有一个概念:error first callbacks在NodeJS中,回调中的第一个参数实际上是一个error对象

让我们想象一下您不处理错误的情况:

fs.readFile('./non_existing_file.json', (err, data) => {

  // here we don't handle the error
  // and if there is an error
  // the second parameter will be undefined

  let myDataObj = JSON.parse(data)
  ...more code...

})
现在,我们没有处理错误,当试图解析未定义的时,我们得到一个错误,使我们的应用程序崩溃。我们需要手动启动我们的应用程序

通过处理错误:

fs.readFile('./some_file.json', (err, data) => {

  if(err) throw err
  // if there is an error
  // the rest of the function won't be executed

  let myDataObj = JSON.parse(data)
  ...more code...

})
现在,它将记录一个错误,告诉我们到底出了什么问题,并且我们的应用程序不会崩溃,它只会记录错误

没有必要记录错误,我们只是记录它以帮助调试。当然,您可以将
if(err)throw err
替换为
if(err)return


这取决于您决定如何处理错误,还是完全处理错误。把它们记录下来是件好事,最好是通知用户出了什么问题。

本周我一直在想同样的事情,我似乎找不到任何直接的答案

我仔细查看了它们的功能,看起来它们根本没有在res流中附加错误处理程序

任何可能导致流错误的原因都必须是罕见的,或者不会像节点教程所建议的那样使程序崩溃。如果是这样,膝关节炎就无法使用了,因为很多人使用它,这似乎不是事实。 我查看了其他HTTP框架,如Hapi和Express,但它们的代码库非常复杂,我发现很难得出类似的结论\

我还发现了几年前的一组实验,这些实验似乎表明Node的教程与Node的实际行为不太一致:

虽然这个实验可能不是对网络编程中可能出错的所有事情的详尽观察,但这里的结果似乎表明HTTP响应流永远不会发出错误事件;或者,至少,这样的错误事件永远不会使服务器崩溃。因此,尽管您必须将“错误”事件处理程序绑定到Node.js中几乎每一个其他流,但您似乎可以安全地假设HTTP响应流永远不会出错,无论发生什么情况。而且,即使响应流关闭,您也可以继续向其写入/通过管道向其写入,而不会产生任何后果


对于我自己的项目,我只是将错误记录在某个地方,以防万一。

你没有错,但我认为这个答案有点离题。这个问题是关于如何处理来自可写HTTP响应流的流错误的。显然,在这种情况下,您不能通知用户,因为响应流将被关闭。