0
我有一个我写的从Restful web服务获取数据的网站。 Restful Web服务使用node-mysql从node.js和MySQL运行。我遇到的问题是连接耗尽。例如,我的默认页面会执行一堆查找来获取数据。在该页面的第9次刷新中,我对Restful API的查找之一会引发此错误“没有可用的连接”。Node.js应用程序的连接池“没有可用的连接”
这里是怎么样的东西在宁静的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 ...'有什么意义? – 2014-10-01 21:55:57
好问题 - 在places.js的头文件/全局属性中,我实例化了place.connectionPool = null。我的假设是,当从server.js调用setRoutes时,connectionPool将被填充在server.js中创建的池中。 place.connectionPool.getConnection实际上是一个从router.js中的路由中调用的函数。那有意义吗? – 2014-10-01 22:18:54