javascript - 關于用mysql模塊連接數(shù)據(jù)庫的一點疑問
問題描述
看實例代碼是這樣子的;
const mysql = require(’mysql’);exports.base = (sql, data, callback) => { // 創(chuàng)建數(shù)據(jù)庫連接 let connection = mysql.createConnection({host: ’localhost’, //數(shù)據(jù)庫所在的服務器域名或者IPuser: ’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ù)庫所在的服務器域名或者IPuser: ’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ù)庫關閉連接應該是在查詢的回調里面完成啊,如果像第一種寫法,查詢還沒結束,就關閉數(shù)據(jù)庫,是不是不妥呢,這個mysql模塊內(nèi)部原理不是很清楚;望大家解惑啊;
問題解答
回答1:文檔:
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()不會馬上關閉連接,要等剩余的查詢執(zhí)行完才關閉,該觸發(fā)的回調還是觸發(fā)。destroy()才是直接關閉連接。
具體實現(xiàn)就是把全部操作都放到隊列里執(zhí)行,end()只是把一個Quit操作放入隊列,Quit操作執(zhí)行完之后才真正關閉。
相關文章:
1. python文檔怎么查看?2. javascript - 有適合開發(fā)手機端Html5網(wǎng)頁小游戲的前端框架嗎?3. javascript - axios請求回來的數(shù)據(jù)組件無法進行綁定渲染4. javascript - JS變量被清空5. java - 在用戶不登錄的情況下,用戶如何添加保存到購物車?6. python - Pycharm的Debug用不了7. html - eclipse 標簽錯誤8. python - pandas按照列A和列B分組,將列C求平均數(shù),怎樣才能生成一個列A,B,C的dataframe9. 安全性測試 - nodejs中如何防m(xù)ySQL注入10. javascript - 關于apply()與call()的問題
