看实例代码是这样子的;
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模块内部原理不是很清楚;
望大家解惑啊;
文档:
所以,调用了
end()
不会马上关闭连接,要等剩余的查询执行完才关闭,该触发的回调还是触发。destroy()
才是直接关闭连接。具体实现就是把全部操作都放到队列里执行,
end()
只是把一个Quit操作放入队列,Quit操作执行完之后才真正关闭。