【问题标题】:node-mysql Connection Pooling "No connections available" for Node.js ApplicationNode.js 应用程序的 node-mysql 连接池“无可用连接”
【发布时间】:2014-11-26 21:05:41
【问题描述】:

我编写了一个网站,该网站从 Restful Web 服务获取数据。该 Restful Web 服务使用 node-mysql 在 node.js 和 MySQL 上运行。我遇到的问题是连接用完了。例如,我的默认页面会进行大量查找以获取数据。在该页面的第 9 次刷新时,我对 Restful API 的一次查找抛出了这个错误“没有可用的连接”。

这是在 Restful API 方面的架构方式:

在 server.js 中:

var db = require('mysql');
var db_pool = db.createPool(
{
    host : 'localhost',
    connectionLimit: 100,
    supportBigNumbers: true,
    waitForConnections: false
});

setRoutes(server, db_pool, passport, LocalStrategy, jwt, tokenSecret, bcrypt);

在 router.js 中:

setRoutes = function(server, connectionPool, passport, LocalStrategy, jwt, tokenSecret, bcrypt)
{
    require('./lib/places.js');
    place.connectionPool = connectionPool;
}

server.get('api/place/:id', function(request, response)
{
    response.header("Access-Control-Allow-Origin", "*");
    response.header("Access-Control-Allow-Headers", "X-Requested-With");

    place.get(request.params.id, function(err, data)
    {
        response.send(data);
        next();
    });
});

最后,在places.js中:

place.connectionPool = null;

place.get = function(id, callback)
{
    place.connectionPool.getConnection(function(error, connection) 
    {
        var query = "select myColumn from myTable";

        connection.query
        (
            query,
            function (queryError, rows, fields)
            {
                try {connection.release();} catch(e){};

                if (queryError)
                {
                    console.log(JSON.stringify(queryError));
                    return (callback(null, queryError));
                }

                return (callback(null, rows));
            }
        );
    });
}

为网站实现 node-mysql 和连接池的最佳实践是什么?

谢谢!

【问题讨论】:

  • place.connectionPool = null;place.connectionPool.getCo... 有什么意义?
  • 好问题 - 在places.js 的标题/全局属性中是我实例化place.connectionPool = null 的地方。我的假设是,当从 server.js 调用 setRoutes 时,connectionPool 会填充在 server.js 中创建的池。 place.connectionPool.getConnection 实际上是在一个从 router.js 中的路由调用的函数中。这有意义吗?

标签: mysql node.js connection-pooling node-mysql


【解决方案1】:

解决了连接问题 - 我没有在所有我进行回调的地方释放连接。

【讨论】:

    猜你喜欢
    • 2011-10-07
    • 2013-09-01
    • 2018-05-28
    • 1970-01-01
    • 2013-05-23
    • 2013-10-01
    • 2015-01-25
    • 2013-09-17
    • 2018-07-15
    相关资源
    最近更新 更多