javascript - 關于用mysql模塊連接數據庫的一點疑問
問題描述
看實例代碼是這樣子的;
const mysql = require(’mysql’);exports.base = (sql, data, callback) => { // 創建數據庫連接 let connection = mysql.createConnection({host: ’localhost’, //數據庫所在的服務器域名或者IPuser: ’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’, //數據庫所在的服務器域名或者IPuser: ’root’, //用戶名password: ’’, //密碼database: ’book’ //數據庫名稱 }); // 執行連接動作 connection.connect(); // 執行數據庫操作 connection.query(sql, data, (err, rows) => {if (err) throw err;callback(rows);// 關閉數據庫connection.end(); }); }
就是感覺 數據庫關閉連接應該是在查詢的回調里面完成啊,如果像第一種寫法,查詢還沒結束,就關閉數據庫,是不是不妥呢,這個mysql模塊內部原理不是很清楚;望大家解惑啊;
問題解答
回答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()不會馬上關閉連接,要等剩余的查詢執行完才關閉,該觸發的回調還是觸發。destroy()才是直接關閉連接。
具體實現就是把全部操作都放到隊列里執行,end()只是把一個Quit操作放入隊列,Quit操作執行完之后才真正關閉。
相關文章:
1. 關docker hub上有些鏡像的tag被標記““This image has vulnerabilities””2. docker - 如何修改運行中容器的配置3. docker鏡像push報錯4. 關于docker下的nginx壓力測試5. angular.js - angularjs的自定義過濾器如何給文字加顏色?6. Docker for Mac 創建的dnsmasq容器連不上/不工作的問題7. 前端 - @media query 使用出現的問題?8. html5和Flash對抗是什么情況?9. java - 如何點擊按鈕,重新運行(我是初學者)?10. html - css氣泡,實現“倒三角(不知道算不算三角了)”可透明的。

網公網安備