[英]getting TypeError: Cannot call method 'releaseConnection' of null in mysql node.js
我正在使用mysql felix node.js模塊。
我正在使用其池連接。
我在服務器端有很多查詢(寫在節點中),它們是這樣寫的:
this.courtsAmount = function(date, callback){
pool.getConnection(function(err, connection) {
connection.query('SELECT MAX(id) AS result from courts where date="' + date + '"', function(err, rows, fields){
connection.release();
if (err) throw err;
if (rows[0].result)
callback(rows[0].result);
else
callback(0);
});
});
};
由於某種原因,我不斷收到此錯誤(從各種類似函數編寫的錯誤中):類型錯誤:無法調用指向“ connection.release()”行的null的方法“ releaseConnection”。 我真的不明白這里是什么問題,因為我從pool.getConnection函數內部的API中了解到,我應該可以完全訪問該連接。 也許這是與連接超時有關的問題? 我認為並非如此,因為在我實際瀏覽網站時會發生此錯誤。
另一個問題:如果使用池,我是否必須處理連接超時的選項? 如果答案是肯定的,我該怎么辦?
謝謝。
我建議在嘗試使用connection
實例之前添加錯誤檢查。 我已經更新了您的代碼(請參見在線注釋):
this.courtsAmount = function(date, callback) {
pool.getConnection(function(err, connection) {
if (err) throw err; // <-- 'connection' might be null, so add an error check here
connection.query('SELECT MAX(id) AS result from courts where date="' + date + '"', function(err, rows, fields) {
if (err) throw err; // <-- moved this line up to check for an error first
connection.release(); // <-- moved this line down so error checking happens first
if (rows[0].result)
callback(rows[0].result);
else
callback(0);
});
});
};
此外,如果date
實例來自不受信任的來源,則您的代碼容易受到SQL注入的攻擊。 您可能會考慮切換到mysql2並使用准備好的語句。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.