我使用的是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理解我应该有完全访问连接。也许这是与连接超时有关的问题?我相信情况并非如此,因为当我实际访问我的网站时会发生此错误。
另一个问题: 如果我使用池,我必须处理连接将超时的选项吗? 如果答案是肯定的,我应该怎么做?
感谢。
答案 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并使用预准备语句。