javascript - 为什么尝试释放此 Node-MySQL 池会导致错误?

标签 javascript mysql node.js

这是我第一次尝试连接池。

我设计了一个 Node.js 数据库连接模块来创建单个连接,该连接在稍后传递给各个模块时使用的池函数中引用。

/* Database Connection */

//REQUIRE CUSTOM MODULES

var mysql = require('mysql');

//DEFINE HELPER FUNCTIONS

function createPool() {
    var pool = mysql.createPool({
        dateStrings : true,
        host : '****',
        user : '****',
        password : '****',
        database : '****'
    });
    return pool;
}

function queryFunc(connection, query, callback) {
    connection.query(query, function(err, rows) {
        if (err) {
            throw err;
        } else {
            connection.release();
            callback(rows);
        }
    });
}

//CREATE POOL

var pool = createPool();

//DEFINE MODULE EXPORTS

var connection = {};

connection.connect = function(query, callback) {
    if ( typeof query !== 'undefined') {
        debug.log('Performing Query: ' + query);

        //get connection via pool
        var connection = pool.getConnection(function(err, connection) {
            debug.log("New connection pool pulled");
            if (err) {
                throw err;
            } else {

                //otherwise run all queries
                var qComplete = 0;
                queryFunc(connection, query, callback);
            }
        });
    } else {
        debug.log('Oops! Tried to perform an empty query...');
    }
};

module.exports.connection = connection;

用法:

var connection = require('connection.js').connection;

connection.connect(...);

它尝试运行查询(我知道,因为我必须修复它提示的错误查询),但给了我错误:

TypeError: Object # has no method 'release'

我构建这个池模块是否错误?如果是这样,如何正确完成?

最佳答案

这是 Javascript variable scope 。当您声明时:

var connection = pool.getConnection(function(err, connection) {...

connect函数中,这个conection变量将使用pool.getConnection的返回值进行初始化。问题是您将 connection 传递给同一范围内的另一个函数:

queryFunc(connection, query, callback);

根据您的解释,您的模块没问题,并且您不需要 connection 的内部声明,因此您可以将其撕掉:

pool.getConnection(function(err, connection) {...

,现在 queryFunc 将收到正确的连接

如果您确实需要将pool.getConnection的返回值归因于某个var,只需使用另一个名称即可。

关于javascript - 为什么尝试释放此 Node-MySQL 池会导致错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28678764/

相关文章:

Javascript、Jquery - 中断 if 语句

javascript - 语义 UI 表单匹配验证不起作用

php - 奇怪的 mysql_fetch_array 错误

node.js - 在 Node.js 中存储敏感凭据的最佳方式是什么?

javascript - 根据变量选择 Vue 过滤器

javascript - 如何在一行中将事件监听器添加到多个元素

Mysql 表允许相同的列名两次并在表中显示两列

php - symfony 第一次无法安装资源

javascript - 尝试在 Node.js 中创建 Postgres DB 时出错

node.js - socket io 向房间中的用户发送消息