关于node_redis的错误处理问题,监听error事件不起效。

发布于 2021-11-27 23:05:29 字数 1146 浏览 856 评论 3

项目用的express+node_redis。。

var redis_client = redis.createClient(redis_port, redis_ip );
//
//catch error event create by redis connection
redis_client.on("error", function (err) {
        console.log("Error: "+err.stack);
});


这里已经监听了error事件。然后启动项目。redis的连接建立。这时候我把redis_server的进程kill掉。异常依然抛出,然后程序退出。。

events.js:72
    throw er; // Unhandled 'error' event
          ^
Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED
    at RedisClient.on_error (/opt/N-chat/node_modules/redis/index.js:185:24)
    at Socket.stream.on.self.should_buffer (/opt/N-chat/node_modules/redis/index.js:95:14)
    at Socket.EventEmitter.emit (events.js:95:17)
    at Socket._destroy.self._writableState.errorEmitted (net.js:440:14)
    at process._tickCallback (node.js:419:13)

Process finished with exit code 8

按照我的设想。。这个监听不是应该类似try catch里面的catch作用??如果我理解有误,请问怎么处理这种异常。。

PS:

网上查过翻过不少github上的项目,但是大部分项目都感觉是自己研究的性质。基本没看到完整的异常处理。如果大家有这种完整已经上线的项目,求链接学习下~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

成熟的代价 2021-11-29 10:36:03

@黄开源中国

你看了源码就会发现, createClient会去创建一个RedisClient  这个RedisClient类会直接去跟redis建立一个连接, 然后等待你的指令, 然而 在这个时候你没有办法监听error事件,因为监听error的这个动作是在Client对象中的, 此时还并没有返回Client对象, 等到后面返回Client对象的时候 错误已经发生了, 代码也没有执行到注册监听那里就直接crash了.   如果你一定要捕捉 可以监听process.on('uncaughtexception', func)

因为看清所以看轻 2021-11-29 06:27:47

想跟你确认一下。createClient这一行不是在启动的时候执行吗?~我的意思是应用启用的时候是可以正常启动的。我是等应用启动完以后过一会才kill掉server端的进程。。

羁拥 2021-11-28 09:59:33

你这个问题直接看一下源码就知道了.  你的错误发生在createClient这一行. 而你的错误处理是在后面才注册的. 所以当然不会有任何反应.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文