首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ECONNRESET错误使NodeJS应用程序崩溃

ECONNRESET错误使NodeJS应用程序崩溃
EN

Stack Overflow用户
提问于 2020-06-17 03:35:45
回答 2查看 5K关注 0票数 0

我是一个编程新手,我需要一些帮助来解决我遇到的一个错误。

我正在运行一个NodeJS应用程序(一个Discord.js机器人),当用户输入某个命令时,我的机器人具有将用户ID注册到MySQL数据库的功能。有时它工作得很好,但有时它会崩溃,并出现ECONNRESET错误:

代码语言:javascript
运行
复制
events.js:292
      throw er; // Unhandled 'error' event
      ^

Error: read ECONNRESET
    at TCP.onStreamRead (internal/stream_base_commons.js:205:27)
Emitted 'error' event on Connection instance at:
    at Connection._handleProtocolError (C:\Users\Celeron\Desktop\DiscordBot\node_modules\mysql\lib\Connection.js:423:8)
    at Protocol.emit (events.js:315:20)
    at Protocol._delegateError (C:\Users\Celeron\Desktop\DiscordBot\node_modules\mysql\lib\protocol\Protocol.js:398:10)
    at Protocol.handleNetworkError (C:\Users\Celeron\Desktop\DiscordBot\node_modules\mysql\lib\protocol\Protocol.js:371:10)
    at Connection._handleNetworkError (C:\Users\Celeron\Desktop\DiscordBot\node_modules\mysql\lib\Connection.js:418:18)
    at Socket.emit (events.js:315:20)
    at emitErrorNT (internal/streams/destroy.js:92:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  errno: 'ECONNRESET',
  code: 'ECONNRESET',
  syscall: 'read',
  fatal: true
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-17 08:07:59

首先,你应该catch这个错误,这样你的应用程序就可以正确地处理它,而不会在mysql连接由于任何奇怪的原因而关闭时崩溃。尝试使用connection.on('error', ...)try-catch blocks

为了保持打开的连接,您应该在关闭时重新连接。或者简单地使用mysql的pooling connection,它可以很好地处理自动重新连接,只需更改一次代码。

PS:池化多个连接通常是异步应用程序(如服务器)的好主意,但通过池化(connectionLimit : 1)维护单个连接是安全的,只是为了自动重新连接本身。

PPS:可以在服务器的my.cnf中配置Mysql的非活动超时

票数 0
EN

Stack Overflow用户

发布于 2020-06-17 07:25:51

我解决了这个问题。崩溃的发生是因为应用程序在数据库上处于不活动状态,并且当。当代码需要一些数据库资源时,mysql服务器会关闭连接,使bot崩溃。

解决方案是创建一个函数来保持DB连接中的活动不变。

代码如下:

代码语言:javascript
运行
复制
    con.query('SELECT 1', (err) => {
        if (err) throw err

        console.log('Tum tum')  \\ Heartbeat noises to know if it worked xD
    })
}
setInterval(keepAlive, 15000)```
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62416274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档