zoukankan      html  css  js  c++  java
  • node-mysql: connect时的”Cannot enqueue Handshake after already enqueuing a Hand shake”错误

    events.js:160
          throw er; // Unhandled 'error' event
          ^


    Error: Cannot enqueue Handshake after invoking quit.
        at Protocol._validateEnqueue (D:ookstore ode_modulesmysqllibprotocolProtocol.js:202:16)
        at Protocol._enqueue (D:ookstore ode_modulesmysqllibprotocolProtocol.js:135:13)
        at Protocol.handshake (D:ookstore ode_modulesmysqllibprotocolProtocol.js:52:41)
        at Connection.connect (D:ookstore ode_modulesmysqllibConnection.js:130:18)
        at D:ookstoreuilddev-server.js:50:14
        at Layer.handle [as handle_request] (D:ookstore ode_modules\_express@4.15.3@expresslib outerlayer.js:95:5)
        at next (D:ookstore ode_modules\_express@4.15.3@expresslib outer oute.js:137:13)
        at Route.dispatch (D:ookstore ode_modules\_express@4.15.3@expresslib outer oute.js:112:3)
        at Layer.handle [as handle_request] (D:ookstore ode_modules\_express@4.15.3@expresslib outerlayer.js:95:5)
        at D:ookstore ode_modules\_express@4.15.3@expresslib outerindex.js:281:22
        at param (D:ookstore ode_modules\_express@4.15.3@expresslib outerindex.js:354:14)
        at param (D:ookstore ode_modules\_express@4.15.3@expresslib outerindex.js:365:14)
        at Function.process_params (D:ookstore ode_modules\_express@4.15.3@expresslib outerindex.js:410:3)
        at next (D:ookstore ode_modules\_express@4.15.3@expresslib outerindex.js:275:10)
        at Function.handle (D:ookstore ode_modules\_express@4.15.3@expresslib outerindex.js:174:3)
        at router (D:ookstore ode_modules\_express@4.15.3@expresslib outerindex.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。这两种方式多数情况下是等价的,除非查询包含多个语句,可以参考这个链接:Difference between using getConnection() and using pool directly in node.js with node-mysql module?.


  • 相关阅读:
    form表单中有bootstrap-switch时怎么提交表单
    Django:drf过滤、搜索、排序功能
    pycharm:使用豆瓣源安装第三方库
    pycharm安装包时:Non-zero exit code (1)
    js: 前端通过ajax方式获取后台数据填充下拉列表
    Django:drf框架中序列化组件—字段验证
    ROS Reality: A Virtual Reality Framework Using Consumer-Grade Hardware for ROS-Enabled Robots David
    Virtual and Augmented Reality for Robotics in Unity environment using Mimic plugin
    Human-machine collaboration in virtual reality for adaptive production engineering
    An open modular framework for efficient and interactive simulation and analysis of realistic human motions for professional applications
  • 原文地址:https://www.cnblogs.com/zaifeng0108/p/7224991.html
Copyright © 2011-2022 走看看