Я унаследовал некоторый код node.js, который, я точно не знаю, как это работает. Проблема заключается в том, что это открытие соединений с базой данных, а не закрытие или повторное использование. Поэтому в какой-то момент я должен убить процесс узла, чтобы освободить соединения, или база данных начнет жаловаться. Я попытался закрыть соединения самостоятельно, но не должен понимать логику, основанную на событиях, так как я либо заканчиваю закрытие соединения до того, как второй запрос может быть запущен, либо вообще нет. Я использую узел 0.6.12 на Ubuntu 12.04.2 LTS с узлом mysql module v0.9.6. Ниже приведен пример модельного метода.Node.js закрытия соединений с базой данных
this.search = function(options, callback) {
if (options.post) {
var query;
var param;
var limit;
var results_per_page = 10;
var page = (options.post.hasOwnProperty('page') && parseInt(options.post.page)) ? options.post.page : 1;
limit = ' LIMIT ' + ((page-1)*(results_per_page)) + ',' + results_per_page;
if (options.post.term) {
var escaped_term = options.database_client.escape('%' + options.post.term + '%');
query = "Q" + limit;
} else {
query = "Q" + limit;
}
options.database_client.query(query, [], query_results);
// Tried closing DB connection here
function query_results(err, results, fields) {
var all_results = {};
all_results.total_results = 0;
all_results.total_pages = 0;
all_results.current_page = page;
all_results.results = [];
if (err) {
console.log('You have an error: ' + err);
throw err;
} else {
if(!results[0]) {
callback(undefined, all_results);
return;
} else{
options.database_client.query("SELECT found_rows() AS total", [], function(err, results2, fields) {
if (err) {
console.log('You have an error: ' + err);
throw err;
} else {
if (!results2[0]) {
callback(undefined, all_results);
return;
} else {
var all_results = {};
all_results.total_results = results2[0].total;
all_results.total_pages = Math.ceil(all_results.total_results/results_per_page);
all_results.current_page = page;
for(var property in results) {
if(results.hasOwnProperty(property)){
if(results[property] == "" || results[property] == " "){
results[property] = null;
}
}
}
all_results.results = results;
}
callback(undefined, all_results);
return;
}
}); // end query
}
}
// I think here is only closing one connection
options.database_client.end();
}
// Also tried here but total_pages, total_results end up being 0 in the results callback
}
};
Я использую options.database_client.end();
, чтобы закрыть соединение с базой данных за документацией node.js MySQL модулей. Любая помощь будет принята с благодарностью.