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