看實例代碼是這樣子的;
const mysql = require('mysql');
exports.base = (sql, data, callback) => {
// 創(chuàng)建數(shù)據(jù)庫連接
let connection = mysql.createConnection({
host: 'localhost', //數(shù)據(jù)庫所在的服務器域名或者IP
user: 'root', //用戶名
password: '', //密碼
database: 'book' //數(shù)據(jù)庫名稱
});
// 執(zhí)行連接動作
connection.connect();
// 執(zhí)行數(shù)據(jù)庫操作
connection.query(sql, data, (err, rows) => {
if (err) throw err;
callback(rows);
});
// 關閉數(shù)據(jù)庫
connection.end();
}
感覺應該是下面這樣的啊
const mysql = require('mysql');
exports.base = (sql, data, callback) => {
// 創(chuàng)建數(shù)據(jù)庫連接
let connection = mysql.createConnection({
host: 'localhost', //數(shù)據(jù)庫所在的服務器域名或者IP
user: 'root', //用戶名
password: '', //密碼
database: 'book' //數(shù)據(jù)庫名稱
});
// 執(zhí)行連接動作
connection.connect();
// 執(zhí)行數(shù)據(jù)庫操作
connection.query(sql, data, (err, rows) => {
if (err) throw err;
callback(rows);
// 關閉數(shù)據(jù)庫
connection.end();
});
}
就是感覺 數(shù)據(jù)庫關閉連接應該是在查詢的回調(diào)里面完成啊,如果像第一種寫法,查詢還沒結束,就關閉數(shù)據(jù)庫,是不是不妥呢,這個mysql模塊內(nèi)部原理不是很清楚;
望大家解惑啊;
認證0級講師
文檔:
Closing the connection is done using end() which makes sure all remaining queries are executed before sending a quit packet to the mysql server.
所以,調(diào)用了end()
不會馬上關閉連接,要等剩余的查詢執(zhí)行完才關閉,該觸發(fā)的回調(diào)還是觸發(fā)。destroy()
才是直接關閉連接。
具體實現(xiàn)就是把全部操作都放到隊列里執(zhí)行,end()
只是把一個Quit操作放入隊列,Quit操作執(zhí)行完之后才真正關閉。