获取TypeError:无法在mysql node.js中调用null的方法'releaseConnection'
Posted
技术标签:
【中文标题】获取TypeError:无法在mysql node.js中调用null的方法\'releaseConnection\'【英文标题】:getting TypeError: Cannot call method 'releaseConnection' of null in mysql node.js获取TypeError:无法在mysql node.js中调用null的方法'releaseConnection' 【发布时间】:2013-09-13 21:13:07 【问题描述】:我正在使用 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】:我建议在尝试使用 connection
实例之前添加错误检查。我已经更新了你的代码(见我的 cmets inline):
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 并使用准备好的语句。
【讨论】:
以上是关于获取TypeError:无法在mysql node.js中调用null的方法'releaseConnection'的主要内容,如果未能解决你的问题,请参考以下文章
Node.js 和 jdbc:TypeError:无法读取未定义的属性“url”
Node.js:在没有返回记录的 SQL 查询中:TypeError:无法读取未定义的属性
Node.js UnhandledPromiseRejection:TypeError:无法读取未定义的属性“符号”
Angular 13 Webpack 异常:TypeError:无法读取未定义的属性(读取“NODE_DEBUG”)
TypeError:无法读取未定义的 vue js 的属性“get”
TypeError:无法调用 null 的方法“查询”-使用 Heroku node.js 调用 pg.connect 时