如何避免“Error: connect ECONNREFUSED”的错误

5

我目前正在使用 Node.js 编写一个 TS3 查询机器人。 我已经添加了自动重连功能,但是现在如果服务器离线,机器人会崩溃,并显示以下错误:

events.js:85
  throw er; // Unhandled 'error' event
        ^
Error: connect ECONNREFUSED
  at exports._errnoException (util.js:746:11)
  at TCPConnectWrap.afterConnect [as oncomplete] (net.js:983:19)

连接开始的那一行是以下内容:
var cl = new ts3.TeamSpeakClient(config.serverIP);

与 node-ts API 一起使用 -> https://github.com/nikeee/node-ts

我已经添加了以下事件:

cl.on('error', function(err){
    console.log("bla: " + err)
});
cl.on('uncaughtException', function (err) {
    console.log(err);
});

uncaughtException没有被触发,错误也没有阻止崩溃。

我该如何防止它崩溃?

编辑:顺便说一下,这是异步的。

1个回答

0

您需要在进程中捕获UncaughtException,而不是在ts3对象中。

process.on('uncaughtException', function (err) {
  console.log(err);
})

关于异常处理的更多信息可以在这里找到。

更新:

cl也有自己的失败Promise。实现方式如下:

cl.fail(function(err) {
    console.log("An error occurred." + util.inspect(err))
});

进程不是已经被弃用了,只能在同步的地方工作吗? - user2693017
  1. 错误被记录但仍然崩溃。
  2. "fail" 未定义错误。
我忘记了它是异步的。
- SirWill
@user2693017:它并没有被弃用,今天仍然可以使用,而且也不依赖于同步位置。 - V31
1
@SirWill:.fail 我从你指出的文档中获取了代码,但它会崩溃,因为你只是记录了错误而没有重新启动进程。我在错误信息中提供的链接可以让你重新启动进程。你可以使用 forever 模块来重新启动进程。 - V31

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接