Nodejs 连接 mysql时报Error: Cannot enqueue Query after fatal error错误的处理办法

首先,需要理解该错误的产生原因,即在于连接的mysql实例出现了致命错误,后续再进行查询等操作就会出现该错误。

处理该错误的方式如下:

  1. 在创建连接的时候,加上supportBigNumbers: true,bigNumberStrings: true配置。
const mysql = require('mysql');

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'user',
  password: 'password',
  database: 'database',
  supportBigNumbers: true,
  bigNumberStrings: true
});

connection.connect((err) => {
  if (err) {
    console.error('error connecting: ' + err.stack);
    return;
  }

  console.log('connected as id ' + connection.threadId);
});
  1. 在进行mysql操作之前,需要验证连接状态,如果连接不正常,需要进行重连。
const mysql = require('mysql');

function handleDisconnect() {
  const connection = mysql.createConnection({
    host: 'localhost',
    user: 'user',
    password: 'password',
    database: 'database'
  });

  connection.connect((err) => {
    if (err) {
      console.error('error connecting: ' + err.stack);
      setTimeout(handleDisconnect, 2000);
      return;
    }

    console.log('connected as id ' + connection.threadId);
  });

  connection.on('error', (err) => {
    if (err.code === 'PROTOCOL_CONNECTION_LOST') {
      console.error('Database connection was closed.');
      handleDisconnect();
    } else {
      throw err;
    }
  });
}

handleDisconnect();

示例1:使用第一种方式处理同步查询mysql出现该错误的情况。

const mysql = require('mysql');

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'user',
  password: 'password',
  database: 'database',
  supportBigNumbers: true,
  bigNumberStrings: true
});

connection.connect((err) => {
  if (err) {
    console.error('error connecting: ' + err.stack);
    return;
  }

  console.log('connected as id ' + connection.threadId);

  connection.query('SELECT * FROM users', (error, results, fields) => {
    if (error) {
      console.log('Error occurred:', error);
      return;
    }

    console.log('Results:', results);
  });
});

示例2:使用第二种方式处理同步查询mysql出现该错误的情况。

const mysql = require('mysql');

function handleDisconnect() {
  const connection = mysql.createConnection({
    host: 'localhost',
    user: 'user',
    password: 'password',
    database: 'database'
  });

  connection.connect((err) => {
    if (err) {
      console.error('error connecting: ' + err.stack);
      setTimeout(handleDisconnect, 2000);
      return;
    }

    console.log('connected as id ' + connection.threadId);

    connection.query('SELECT * FROM users', (error, results, fields) => {
      if (error) {
        console.log('Error occurred:', error);
        return;
      }

      console.log('Results:', results);
      connection.end();
    });
  });

  connection.on('error', (err) => {
    if (err.code === 'PROTOCOL_CONNECTION_LOST') {
      console.error('Database connection was closed.');
      handleDisconnect();
    } else {
      throw err;
    }
  });
}

handleDisconnect();

通过以上两种方式,可以避免出现Nodejs连接mysql时报Error: Cannot enqueue Query after fatal error错误,并保证mysql连接正常进行数据操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Nodejs 连接 mysql时报Error: Cannot enqueue Query after fatal error错误的处理办法 - Python技术站

(1)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • SQL Server SQL高级查询语句小结

    SQL Server SQL高级查询语句小结 1. 联合查询 联合查询(UNION)是将两个或多个 SELECT 语句的结果组合成一个结果集的操作。下面是一个简单的联合查询示例,将两个表的数据合并在一起: SELECT name FROM table1 UNION SELECT name FROM table2 2. 子查询 子查询是一个 SELECT 语句…

    database 2023年5月21日
    00
  • SQL字符串处理函数大全

    SQL字符串处理函数大全 SQL字符串处理函数可以对字符串进行分割、合并、替换等操作,方便我们进行数据处理。本篇攻略将详细介绍SQL字符串处理函数的使用方法。 1. CONCAT函数 CONCAT函数可以将多个字符串连接起来,形成一个新的字符串。使用方法如下: CONCAT(string1, string2, …) 例如,将“hello”和“world”…

    database 2023年5月21日
    00
  • MySQL/MariaDB中如何支持全部的Unicode

    要支持全部的Unicode字符集,MySQL/MariaDB需要使用UTF-8字符集。下面是实现该过程的完整攻略: Step 1:设置服务器 在my.cnf或my.ini配置文件中,确保默认字符集被设置为UTF-8: [client] default-character-set=utf8 [mysqld] character-set-server=utf8 …

    database 2023年5月18日
    00
  • redis数据库的数据导入到SQLServer数据库中

    1./. #!/usr/bin/python# -*-coding:utf-8-*- “””@author: yugengde@contact: yugengde@163.com@file : redis_sqlserver.py@time: 2017/11/11 16:50″””import redisimport pymssqlimport jsonfr…

    Redis 2023年4月12日
    00
  • Linux 自动唤醒和关闭的实现方法

    下面是详细的讲解。 Linux 自动唤醒和关闭的实现方法 我们可以通过设置 BIOS 或者 ACPI(高级配置与电源管理接口)来实现 Linux 自动唤醒和关闭。其中,ACPI 是一种智能电源管理机制,它在操作系统内核和硬件之间起到桥梁的作用,可以实现更加高级的功能。 下面我们分别来讲解如何通过 BIOS 和 ACPI 来实现 Linux 自动唤醒和关闭。 …

    database 2023年5月22日
    00
  • SQL Server评估期已过问题的解决方法

    下面是“SQL Server评估期已过问题的解决方法”的完整攻略,具体过程如下: 问题背景 在使用SQL Server时,如果我们在安装完SQL Server之后,没有输入有效的许可证密钥,那么SQL Server将进入评估期。一旦过了评估期,SQL Server就会停止运行,也就是我们经常遇到的“SQL Server评估期已过”的问题。如果我们没有及时解决…

    database 2023年5月21日
    00
  • Could not connect to Redis at 127.0.0.1:6379: Connection refused

    Could not connect to Redis at 127.0.0.1:6379: Connection refused 二、出现原因 昨天装完redis,服务也启动成功了,客户端正常连接,然后晚上关机睡觉,当然Linux虚拟机也就关闭了。 第一天装redis的时候,我埋了一个雷,正常情况是不是要修改redis.conf文件的配置,什么后台运行呀、设…

    Redis 2023年4月13日
    00
  • 5分钟快速了解数据库死锁产生的场景和解决方法

    下面我将详细讲解如何快速了解数据库死锁产生的场景和解决方法。 了解什么是数据库死锁 在开始讲解如何快速了解数据库死锁产生的场景和解决方法之前,首先需要了解什么是数据库死锁。 数据库死锁指的是两个或多个事务相互等待对方释放锁,从而导致所有事务都无法继续执行的一种现象。通俗点说,就是两个或多个事务卡住了,互相等待对方的锁释放。 数据库死锁的场景 接下来我们来看一…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部