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日

相关文章

  • Tomcat服务器响应过慢解决方案

    下面是详细讲解Tomcat服务器响应过慢解决方案的完整攻略: 背景 Tomcat服务器响应过慢一直是开发者面临的问题之一。当网站访问量增多时,Tomcat的性能将会受到影响,并可能导致服务的不稳定甚至崩溃。 解决方案 1. 调整JVM参数 JVM(Java Virtual Machine)是Java程序的运行环境,设置JVM参数可以适当提高Tomcat服务器…

    database 2023年5月21日
    00
  • Go语言提升开发效率的语法糖技巧分享

    下面是针对“Go语言提升开发效率的语法糖技巧分享”的完整攻略: Go语言提升开发效率的语法糖技巧分享 一、介绍 Go语言作为一门开发效率高,运行速度快的编程语言,其语法简洁、易于理解,同时支持并发编程,因此备受程序员们的喜爱。在使用Go语言进行开发时,我们可以通过一些语法糖技巧来提高开发效率。本文将会介绍一些常用的技巧,并结合示例进行讲解。 二、技巧分享 1…

    database 2023年5月22日
    00
  • 简单谈谈MySQL的半同步复制

    MySQL的半同步复制是一种高可用性和数据一致性的数据复制方式,它可以在主节点提交事务后,等待至少一个从节点也提交了该事务才返回成功,保证了数据的可靠性,同时又不会像全同步复制一样影响主库的写入效率。下面是详细的攻略: 步骤一:修改MySQL的配置文件 在MySQL的配置文件(my.cnf)中,需要打开半同步复制选项: [mysqld] plugin-loa…

    database 2023年5月22日
    00
  • ORA-06512数字或值错误字符串缓冲区太小异常详解

    ORA-06512数字或值错误字符串缓冲区太小异常,意味着在执行一个存储过程、函数或是匿名块时,Oracle数据库引擎检测到了一个异常。这个异常通常出现在一个 PL/SQL 块中,它告诉我们数据库引擎在执行一个子程序时发生了一个错误。 出现这个异常的常见原因是我们声明的字符串变量或抓取的结果集的大于程序缓冲区分配的内存空间。这可能会导致存储过程执行失败,或者…

    database 2023年5月18日
    00
  • 关于Redis数据库入门详细介绍

    Redis数据库入门详细介绍 Redis是一种键值(key-value)型非关系数据库,常用于缓存和分布式储存。它支持各种数据结构,包括字符串(string)、哈希(hash)、列表(list)、集合(set)和有序集合(sorted set)。Redis是一个开源且高性能的数据库,简单易学,功能强大。下面就来详细讲解Redis数据库的入门教程。 Redis…

    database 2023年5月22日
    00
  • PostgreSQL 查看数据库,索引,表,表空间大小的示例代码

    PostgreSQL 是一款十分流行的开源关系型数据库管理系统,非常适合用于数据分析、应用程序开发、Web 应用程序、GIS 应用等各种场景。在 PostgreSQL 中,我们可以通过各种命令和SQL语句来查询和管理我们的数据库、表、索引、表空间等对象。 以下是“PostgreSQL 查看数据库,索引,表,表空间大小”的示例代码攻略,以下示例均在Linux系…

    database 2023年5月19日
    00
  • pymongo为mongodb数据库添加索引的方法

    添加索引是提高MongoDB数据库查询性能的一种有效方法,而Pymongo是Python语言操作MongoDB的工具库。下面介绍Pymongo为MongoDB添加索引的方法攻略。 1. 创建客户端连接 要使用Pymongo操作MongoDB,需要创建一个连接MongoDB的客户端。可以通过以下代码创建客户端连接: from pymongo import Mo…

    database 2023年5月22日
    00
  • Python使用LDAP做用户认证的方法

    关于 Python 使用 LDAP 进行用户认证的方法,我们可以分为以下几个步骤: 1. 安装 Python-ldap 模块 Python-ldap是一个Python包,它提供了对LDAP目录访问的接口。要安装它,可以使用 pip 命令: pip install python-ldap 如果你使用的是 Windows 操作系统,则还需要在安装完成之后,手动将…

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