获取TypeError:无法在mysql node.js中调用null的方法'releaseConnection'

时间:2013-09-10 08:37:40

标签: javascript mysql node.js angularjs express

我使用的是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);
        });
  });
    };

由于某些原因我不断收到此错误(来自各种类似的函数): 类型错误:无法调用null的方法'releaseConnection' 它指向'connection.release()'行。 我真的不明白这里有什么问题,因为我从pool.getConnection函数内部的API理解我应该有完全访问连接。也许这是与连接超时有关的问题?我相信情况并非如此,因为当我实际访问我的网站时会发生此错误。

另一个问题: 如果我使用池,我必须处理连接将超时的选项吗? 如果答案是肯定的,我应该怎么做?

感谢。

1 个答案:

答案 0 :(得分:1)

我建议在尝试使用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并使用预准备语句。