博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
node-mysql: connect时的”Cannot enqueue Handshake after already enqueuing a Hand shake”错误
阅读量:5279 次
发布时间:2019-06-14

本文共 2412 字,大约阅读时间需要 8 分钟。

events.js:160

      throw er; // Unhandled 'error' event
      ^
Error: Cannot enqueue Handshake after invoking quit.
    at Protocol._validateEnqueue (D:\bookstore\node_modules\mysql\lib\protocol\Protocol.js:202:16)
    at Protocol._enqueue (D:\bookstore\node_modules\mysql\lib\protocol\Protocol.js:135:13)
    at Protocol.handshake (D:\bookstore\node_modules\mysql\lib\protocol\Protocol.js:52:41)
    at Connection.connect (D:\bookstore\node_modules\mysql\lib\Connection.js:130:18)
    at D:\bookstore\build\dev-server.js:50:14
    at Layer.handle [as handle_request] (D:\bookstore\node_modules\_express@4.15.3@express\lib\router\layer.js:95:5)
    at next (D:\bookstore\node_modules\_express@4.15.3@express\lib\router\route.js:137:13)
    at Route.dispatch (D:\bookstore\node_modules\_express@4.15.3@express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (D:\bookstore\node_modules\_express@4.15.3@express\lib\router\layer.js:95:5)
    at D:\bookstore\node_modules\_express@4.15.3@express\lib\router\index.js:281:22
    at param (D:\bookstore\node_modules\_express@4.15.3@express\lib\router\index.js:354:14)
    at param (D:\bookstore\node_modules\_express@4.15.3@express\lib\router\index.js:365:14)
    at Function.process_params (D:\bookstore\node_modules\_express@4.15.3@express\lib\router\index.js:410:3)
    at next (D:\bookstore\node_modules\_express@4.15.3@express\lib\router\index.js:275:10)
    at Function.handle (D:\bookstore\node_modules\_express@4.15.3@express\lib\router\index.js:174:3)
    at router (D:\bookstore\node_modules\_express@4.15.3@express\lib\router\index.js:47:12)

原文地址 https://www.mgenware.com/blog/?p=2924&utm_source=tuicool&utm_medium=referral

本文测试环境: Node.js 4.2.2, node-mysql 2.9.0

使用node-mysql遇到Cannot enqueue Handshake after already enqueuing a Hand shake。这个错误提示意思是某个数据库连接已经执行了,不能进行多次连接了。遇到此类情况,首先看下代码是否出现了同一个数据库连接多次调用connect方法的情况,这种明显的错误排除后,看看是否在调用connect前发生了隐式的连接操作,比如在未连接时直接调用query做查询会间接去connect,如下代码,createConnection后直接调用query也会触发连接:

var mysql = require('mysql');mysql.createConnection({
...}).query('...', (err, res) => {
if (err) {
// 处理错误 } // 隐式连接,没有连接错误的话,数据会正常返回});

当然,也可以直接去掉显式的connect调用,任由query去做隐式连接,也不会出现上述错误,不过如果这样的话,强烈建议使用Pool,这样数据库连接可以最大化的实现复用和管理,和createConnection返回的连接一样,Pool可以通过getConnection返回一个连接,也可以直接用query去自动复用或创建一个连接。不过如果使用pool.getConnection的话,记得用完连接后调用connection.release把连接返回给Pool。这两种方式多数情况下是等价的,除非查询包含多个语句,可以参考这个链接:.

转载于:https://www.cnblogs.com/zaifeng0108/p/7224991.html

你可能感兴趣的文章
Codeforces 235 E Number Challenge
查看>>
ubuntu 常见命令整理
查看>>
EJBCA安装教程+postgresql+wildfly10
查看>>
(五十四)涂鸦的实现和截图的保存
查看>>
配置EditPlus使其可以编译运行java程序
查看>>
java中的占位符\t\n\r\f
查看>>
7.14
查看>>
SDN2017 第一次作业
查看>>
MySQL通过frm 和 ibd 恢复数据过程
查看>>
AngularJs 学习笔记(2)
查看>>
关于元素优先级
查看>>
oo第一单元作业总结
查看>>
SRS源码——Listener
查看>>
web.xml 4.0 头
查看>>
Java面向对象抽象类案例分析
查看>>
100.Same Tree
查看>>
JAVA 根据经纬度算出附近的正方形的四个角的经纬度
查看>>
对SPI、IIC、IIS、UART、CAN、SDIO、GPIO的解释
查看>>
Thymeleaf模板格式化LocalDatetime时间格式
查看>>
庖丁解“学生信息管理系统”
查看>>