Я программирую сервер NodeJS с помощью Express и MySQL.Предполагается, что этот сервер будет работать только как Rest API, предоставляя данные JSON для мобильного приложения и клиентского приложения Angular.
В настоящее время я подключаюсь к базе данных с помощью модуля mysql npm.Я замечаю увеличение количества потоков каждый раз, когда перезагружаю свое приложение, так как они не закрываются.Причина в том, что я запускаю соединение при первом запуске сервера.Я задаюсь вопросом, является ли мой подход кодирования действительно лучшим или если в свое время соединение будет прервано, если многие люди начнут получать к нему доступ.
В конце я хочу знать, должен ли я быть: 1)Выполнение HTTP-запроса 2) Открытие соединения 3) Извлечение данных 4) Закрытие соединения после получения данных.
Или, если мне следует придерживаться моего подхода: 1) Запуск соединения при запуске службы2) Используя эту ссылку, чтобы сделать все запросы / ответы
Код того, как я делаю это сейчас:
db_config.ts
import mysql from 'mysql';
import DevTools from '../dev_tools/devtools';
export function connectToDatabase(): any {
let connection = mysql.createConnection({
host: 'localhost',
port: 3306,
user: 'userapp',
password: 'app!@#',
database: 'db_app'
})
connection.connect((err) => {
if (err) {
DevTools.printIfInDevMode('DATABASE', ` ${err.code} - Error while connecting: ${err.name} - ${err.message} `)
return;
}
DevTools.printIfInDevMode('DATABASE', `Connected with id ${connection.threadId}`)
return connection;
})
}
server_config.ts
import express from "express";
import DevTools from "../dev_tools/devtools";
const app = express();
//Configuração para receber parâmetros via POST
app.use(express.urlencoded(
{
extended: true
}
));
app.post('/', (req, res) => {
DevTools.printIfInDevMode('SERVER', 'Chegou aqui')
res.send(req.body);
})
export default app;
server_start.ts
// node-typescript/src/entry.ts
import app from './server_config';
import { connectToDatabase } from './db_config';
export default function startServer() {
app.listen(3000, () => {
console.log(`[SERVER] Servidor Iniciado `);
connectToDatabase();
});
}
app_dev.ts
import startServer from './config/server_start';
import DevTools from './dev_tools/devtools';
console.log("[SERVER] Starting in developer mode")
DevTools.setDevMode(true);
startServer();
Что происходит в основном:
- Я использую npm для запуска app_dev.ts
- app_dev.ts заставляет приложение работать в режиме разработчика, что позволяет мне легко выполнять отладку с помощью метода "printIfInDevMode".
- Itвызывает метод "startServer", который импортируется из server_start.ts
- server_start.ts импортирует переменную приложения из server_config.ts , которая содержит конфигурацию для экспресс-службы.
- server_start.ts выполняет метод прослушивания на порту 3000, после чего пытается подключиться к базе данных с помощью метода «connectToDatabase», импортированного из db_config.ts
- «connectToDatabase»"Метод просто устанавливает соединение с сервером MySQL, работающим на локальном хосте, и возвращает ошибку, если это не удается сделать.
- Если это удается, он выводит ThreadId соединения.
Мне интересно, должен ли я оставить метод «connectToTheDatabase» внутри app.listen (3000) и никогда не закрывать это соединение, или мне следует поместить его в маршруты GET, открывая соединение, когда кто-то обращается к этому маршруту,получение данных и затем закрытие соединения.