Я занимаюсь разработкой приложения с использованием ReactJS / NodeJS + ExpressJS.
Я пытаюсь понять, каков наилучший способ обработки соединений с базой данных.Этот код работает, но кажется, что он постоянно увеличивает количество соединений, и я не думаю, что это хорошо , но вы могли бы просветить меня об этом.
Когда я только начал своюMySQL сервер (без запуска моего приложения) соединений было уже 60, что это такое?
MariaDB [(none)]> show status like 'Conn%';
+-----------------------------------+-------+
| Variable_name | Value |
+-----------------------------------+-------+
| Connection_errors_accept | 0 |
| Connection_errors_internal | 0 |
| Connection_errors_max_connections | 0 |
| Connection_errors_peer_address | 0 |
| Connection_errors_select | 0 |
| Connection_errors_tcpwrap | 0 |
| Connections | 60 |
+-----------------------------------+-------+
7 rows in set (0.001 sec)
Затем, как только я запустил свое приложение, количество подключений увеличилось до 64:
MariaDB [(none)]> show status like 'Conn%';
+-----------------------------------+-------+
| Variable_name | Value |
+-----------------------------------+-------+
| Connection_errors_accept | 0 |
| Connection_errors_internal | 0 |
| Connection_errors_max_connections | 0 |
| Connection_errors_peer_address | 0 |
| Connection_errors_select | 0 |
| Connection_errors_tcpwrap | 0 |
| Connections | 64 |
+-----------------------------------+-------+
7 rows in set (0.000 sec)
Затем каждый разЯ перезапускаю свое внутреннее приложение или делаю запрос от внешнего интерфейса, кажется, что количество соединений увеличивается.
Я не уверен, как управлять соединениями, и я признаю, что некоторые части кода яиспользование не совсем понятно для меня (я новичок в реагировании, выражениях и нодах), так что наберитесь терпения.
Это часть кода, который я использую, надеюсь, вы поможете мне найти лучшийспособ управления соединениями.
Поскольку connection
будет использоваться в нескольких областях моего приложения, я создал файл .js, содержащий следующее:
class Connection {
static connect() {
var mysql = require('mysql');
var connection = null;
var connection_settings = {
host : 'localhost',
database : '..',
user : '..',
password : '..',
}
connection = mysql.createConnection(connection_settings);
connection.connect(function(err) {
if(err) {
console.log('error when connecting to db:', err);
}
});
return connection;
}
}
module.exports = { Connection }
А затем файлв коде, который запрашивает db:
const { Connection } = require('../database.js')
function openLessonSections (lessonID, connection){
return new Promise(function (resolve, reject){
const sql = "SELECT * FROM sections WHERE lesson_id=" + lessonID;
connection.query (sql, function (error, result){
console.log('Loading lesson "' + lessonID + '".');
if (error) reject (error);
resolve (result);
});
});
}
async function openLesson(lessonID, connection){
return await openLessonSections(lessonID, connection);
}
exports.lessonOpen = function(req, res, next) {
const connection = Connection.connect();
console.log('request received');
const lessonID = JSON.parse(req.body.lessonID);
console.log('Opening lesson: ' + lessonID);
openLesson(lessonID, connection)
.then(function(result){
console.log('The lesson was opened successfully.');
res.status(200).json({sections: result});
})
.catch(function (error){
res.status(500).json(error);
console.log('There was an error while opening the lesson. ' + error);
});
connection.end();
}
Я знаю, что делаю что-то не так, и я немного запутался в том, что такое лучший подход.Спасибо за любую помощь.