【发布时间】: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