node-mysql连接池"没有可用的连接"用于Node.js应用程序

时间:2014-10-01 21:50:53

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

我有一个我写过的网站,它从Restful网络服务中获取数据。 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和连接池的最佳做法是什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

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