簡體   English   中英

收到TypeError:無法在mysql node.js中調用null的方法“ releaseConnection”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM