学习NodeJS时,遇到Error: Cannot enqueue Handshake after invoking quit.的解决方案

问题


Error: Cannot enqueue Handshake after invoking quit.


在最近学习node.js如何连接mysql数据库时,遇到了一个问题,第一次连接数据库时正常,再次与数据库交互时报错:Error: Cannot enqueue Handshake after invoking quit.

原因就是:当你在发出请求的时候执行connection.connect(),为了不占用连接,每次都会connection.end(),但是下一次请求时,并没有创建新的连接。

最简单的方法是去掉connection.end(),让数据库自己释放不活跃的连接。
如果有强迫症一定要connection.end(),可以试试下面的解决方法:

dbutil.js:

var mysql = require('mysql');

var connection = mysql.createConnection({
    host: '127.0.0.1',
    database: 'school',
    user: 'root',
    password: '123456'
});

module.exports = connection;

dao文件:

var connection = require('./dbutil');

function queryStudentBysNoAndSex(sNo, sex) {
    connection.connect();
    var queryStudent = "select * from student where sNo = ? and sex = ?";
    var params = [sNo, sex];
    connection.query(queryStudent, params, function (error, result) {
        if (error == null) {
            console.log(result);
        } else {
            console.log(error);
        }
        connection.end();
    });
}

经过修改后:

dbutil.js导出模块为createConnection函数:

var mysql = require('mysql');

function createConnection() {
    var connection = mysql.createConnection({
        host: '127.0.0.1',
        database: 'school',
        user: 'root',
        password: '123456'
    });
    return connection;
}
module.exports.createConnection = createConnection;

Dao文件中每次dbutil.createConnection();即可:

var dbutil = require('./dbutil');
var connection = null;

function queryStudentBysNoAndSex(sNo, sex) {
    connection = dbutil.createConnection();
    connection.connect();
    var queryStudent = "select * from student where sNo = ? and sex = ?";
    var params = [sNo, sex];
    connection.query(queryStudent, params, function (error, result) {
        if (error == null) {
            console.log(result);
        } else {
            console.log(error);
        }
        connection.end();
    });
}

这样就可以每次请求时createConnection()方法创建一个新连接,结束后end().

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值