我正在用Express和MySQL编程NodeJS服务器。该服务器仅应使用Rest API,向移动应用程序和Angular前端应用程序提供JSON数据。
我目前正在使用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();
基本上会发生什么:
我想知道是否应该在app.listen(3000)中保留“ connectToTheDatabase”方法,并且永远不要关闭此连接,还是应该将其放在GET路由中,当有人访问该路由时打开一个连接,检索数据,然后关闭连接。
答案 0 :(得分:0)
从mysql npm页面/文档中,
使用end()结束连接,以确保在将退出数据包发送到mysql服务器之前执行所有剩余的查询。
因此,您可能会执行connection.end()
之类的操作来实现所需的功能,即假设开放连接确实是问题所在。
在这种情况下共享一些代码会有所帮助。