javascript - 关于用mysql模块连接数据库的一点疑问

查看:157
本文介绍了javascript - 关于用mysql模块连接数据库的一点疑问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

看实例代码是这样子的;

const mysql = require('mysql');

exports.base = (sql, data, callback) => {
    // 创建数据库连接
    let connection = mysql.createConnection({
        host: 'localhost', //数据库所在的服务器域名或者IP
        user: 'root', //用户名
        password: '', //密码
        database: 'book' //数据库名称
    });
    // 执行连接动作
    connection.connect();
    // 执行数据库操作
    connection.query(sql, data, (err, rows) => {
        if (err) throw err;
        callback(rows);
    });
    // 关闭数据库
    connection.end();
}

感觉应该是下面这样的啊

const mysql = require('mysql');

exports.base = (sql, data, callback) => {
    // 创建数据库连接
    let connection = mysql.createConnection({
        host: 'localhost', //数据库所在的服务器域名或者IP
        user: 'root', //用户名
        password: '', //密码
        database: 'book' //数据库名称
    });
    // 执行连接动作
    connection.connect();
    // 执行数据库操作
    connection.query(sql, data, (err, rows) => {
        if (err) throw err;
        callback(rows);
        // 关闭数据库
        connection.end();
    });
    
}

就是感觉 数据库关闭连接应该是在查询的回调里面完成啊,如果像第一种写法,查询还没结束,就关闭数据库,是不是不妥呢,这个mysql模块内部原理不是很清楚;
望大家解惑啊;

解决方案

文档:

Closing the connection is done using end() which makes sure all remaining queries are executed before sending a quit packet to the mysql server.

所以,调用了end()不会马上关闭连接,要等剩余的查询执行完才关闭,该触发的回调还是触发。destroy()才是直接关闭连接。

具体实现就是把全部操作都放到队列里执行,end()只是把一个Quit操作放入队列,Quit操作执行完之后才真正关闭。

这篇关于javascript - 关于用mysql模块连接数据库的一点疑问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆