gpt4 book ai didi

javascript - 获取 TypeError : Cannot call method 'releaseConnection' of null in mysql node. js

转载 作者:行者123 更新时间:2023-11-29 03:03:58 26 4
gpt4 key购买 nike

我正在使用 mysql felix node.js 模块。

我正在使用它的池连接。

我的服务器端(用 Node 编写)有很多这样写的查询:

  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 了解到的那样,我应该可以完全访问连接。也许这是与连接超时有关的问题?我相信情况并非如此,因为这个错误是在我实际浏览我的网站时发生的。

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

谢谢。

最佳答案

我建议在尝试使用 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 注入(inject)攻击。您可以考虑切换到 mysql2并使用准备好的语句。

关于javascript - 获取 TypeError : Cannot call method 'releaseConnection' of null in mysql node. js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18714192/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com