node.js中无法捕获的错误

Pet*_*rns 11 error-handling tcp node.js

所以我正在尝试编写一个简单的TCP套接字服务器,向所有连接的客户端广播信息.因此,当用户连接时,它们会被添加到客户端列表中,当流发出关闭事件时,它们将从客户端列表中删除.

这很有效,除了有时我在用户断开连接时发送消息.

我已经试过包装stream.write()在一个try/catch块,但没有运气.似乎错误是无法捕获的.

Pet*_*rns 18

解决方案是为流的'error'事件添加一个监听器.这起初看起来似乎是违反直觉的,但是它的合理性是合理的.

stream.write()以异步方式发送数据.当节点意识到写入套接字时引发了代码已经移动的错误,通过对stream.write的调用,所以没有办法在那里引发错误.

相反,在这种情况下,哪个节点从流中发出"错误"事件,并且对EventEmitter进行编码,使得如果没有"错误"事件的侦听器,则会将错误引发为顶级异常,并且该过程结束.


dom*_*nic 15

彼得是对的,

还有另一种方法,你也可以用一个捕获所有错误处理程序

process.on('uncaughtException',function(error){
// process error
})
Run Code Online (Sandbox Code Playgroud)

这将抓住抛出的一切......

如果可能的话,通常更好地做这个peter的方式,但是如果你在编写测试框架的地方,那么使用它可能是一个好主意 process.on('uncaughtException',...

这里有一个要点,它涵盖了(我认为)nodejs处理错误的所有不同之处 http://gist.github.com/636290