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

yizhihongxing

首先,需要理解该错误的产生原因,即在于连接的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日

相关文章

  • 关于MongoTemplate通过id查询为null的问题

    当使用MongoDB的Java驱动程序MongoTemplate时,如果使用findOne()方法通过id查询某个文档,可能会出现返回null的情况。那么这种现象背后的原因是什么,该怎样处理呢?下面是这个问题的完整攻略。 1. 问题原因 MongoTemplate的findOne()方法使用的是findById(),而findById()方法需要满足以下两个…

    database 2023年5月22日
    00
  • oracle备份之备份测试脚本的方法(冷备、热备、rman)

    Oracle备份之备份测试脚本的方法 备份是Oracle数据库维护中非常重要的一环,而备份测试是保证备份可靠性和可恢复性的重要手段之一。本文将详细讲解备份测试脚本的制作方法以及测试流程,包括冷备、热备、RMAN备份三种方式。 冷备 冷备份是指在Oracle数据库关闭状态下进行的备份。具体步骤如下: 停止Oracle数据库服务。 将整个数据库目录打包或复制到另…

    database 2023年5月22日
    00
  • 使用.NET 6开发TodoList应用之引入数据存储的思路详解

    这里是使用.NET 6开发TodoList应用之引入数据存储的思路详解的完整攻略。 简介 在TodoList应用的开发过程中,数据存储是一个非常重要的部分。本攻略将会讲解如何使用.NET 6进行数据存储的设计和实现。我们将会使用Microsoft Entity Framework Core作为数据访问程序框架,并使用SQLite数据库作为数据存储介质。 安装…

    database 2023年5月21日
    00
  • 如何使用Python实现数据库中数据的去重?

    以下是使用Python实现数据库中数据去重的完整攻略。 数据库中数据去重简介 在数据库中,数据去重是指删除重复的数据行。在Python中,可以使用pymysql库实现数据库中去重。 步骤1:连接到数据库 在Python中,可以使用pymysql库连接到MySQL数据库。以下是连接到MySQL数据库的基语法: import pymysql db = pymys…

    python 2023年5月12日
    00
  • Neo4j和Couchbase的区别

    Neo4j和Couchbase都是非关系型数据库,但两者在架构设计和数据处理方面存在一些不同之处。 Neo4j是一款图形数据库,其数据结构基于节点(node)和关系(relationship)之间的关系网络。该结构非常适合于处理复杂的关系数据,并且可以进行高效的深度遍历查询。例如,如果您要存储社交网络中的用户和他们之间的关系,那么Neo4j是一个很好的选择。…

    database 2023年3月27日
    00
  • Redis的有序集合操作命令

    有序集合(zset)就是可以排序的set,通过每个元素关联的score值来为元素进行从小到大的排序,zset中元素不能重复,但是score却可以重复 设定/修改命令 zadd key score member [[score member] [score member] …] 将一个或多个member元素及其score值加入到key当中 score值可以…

    Redis 2023年4月11日
    00
  • 2019年Web开发与全站工程师技术指南和趋势

    2019年Web开发与全站工程师技术指南和趋势 Web开发和全站工程师是当前IT行业中非常热门的职位之一,而随着技术的不断发展,这个领域也急速发展,需要不断学习新技术和新趋势。下面我们来讲解一下2019年Web开发与全站工程师技术指南和趋势,帮助读者把握发展机遇。 前端技术指南和趋势 前端技术一直是Web开发中的重要组成部分,越来越多的新技术和新趋势正在涌现…

    database 2023年5月21日
    00
  • oracle通过存储过程上传list保存功能

    下面我将给出详细讲解“Oracle通过存储过程上传List保存功能”的完整攻略。 1、数据库准备 首先需要创建一个数据库和表来存储上传数据,假设我们创建的表名为list_data,表结构如下: CREATE TABLE list_data( id NUMBER NOT NULL, name VARCHAR2(100) NOT NULL, age NUMBER…

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