mysql - Node.js mysql 流查询被触发两次或更多次
问题描述
当我想将一块硬件(终端)添加到我的 mysql 数据库时,我有一个应用程序通过 SSH 连接到 MySQL 数据库。这是它的功能:
const SSHConnection = new Promise(async (resolve, reject) => {
sshClient.on('ready', async () => {
sshClient.forwardOut(
forwardConfig.srcHost,
forwardConfig.srcPort,
forwardConfig.dstHost,
forwardConfig.dstPort,
(err, stream) async => {
if (err) reject(err);
// create a new DB server object including stream
const updatedDbServer = {
...dbServer,
stream
};
// connect to mysql
const connection = mysql.createConnection(updatedDbServer);
// check for successful connection
// resolve or reject the Promise accordingly
connection.connect(async (error) => {
if (error) {
reject(error);
}
let query = await connection.promise().query("INSERT INTO `mandator_1`.`terminal` (`serialNumber`, `name`, `isActive`, `status`, `profileId`, `businessId`, `divisionId`, `ipAddress`, `groupId`, `setupVersion`, `macAddress`) VALUES ('" + terminal.serial + "', '" + terminal.serial + "', '1', NULL, '1', '1', NULL, '172.45.17.197', '1', NULL, '" + terminal.macAddress + "');");
let updateTerminal = await connection.promise().query("UPDATE `terminal` SET `status` = UNIX_TIMESTAMP(NOW()) * 1000, `setupVersion` = '005', `hardwareType` = '10', `update` = 0, `lastUpdated` = UNIX_TIMESTAMP(NOW()) * 1000, `dataReceived` = UNIX_TIMESTAMP(NOW()) * 1000 WHERE `setupVersion` IS NULL AND `hardwareType` IS NULL AND `lastUpdated` IS NULL AND `dataReceived` IS NULL AND `serialNumber` = '"+ terminal.serial +"'");
resolve(connection);
});
});
}).connect(tunnelConfig);
});
如果我现在删除终端并添加另一个终端,则还会再次添加第一个终端。我觉得它有什么。与流/数据库连接有关。添加第一个终端后可能需要关闭或清除它?
解决方案
一般来说,不建议让连接保持打开状态,除非是类似终端的应用程序。您应该通过执行 connection.end() 确保在应用程序关闭后关闭连接,以防止资源泄漏。关闭连接将有效地断开第一个终端与数据库的连接,并且应该可以解决您的问题。请参阅链接以供参考: 何时使用 node-mysql 关闭 MySQL 连接?
推荐阅读
- c# - Xamarin Forms Android 应用程序在事件处理程序期间创建类对象后崩溃
- python - 合并两个数据帧以减少内存消耗
- android - Android - onClickListener 不适用于 CardView 中的 ImageButton
- visual-studio - Visual Studio 2019 扩展无限加载
- python - 无法在 cmd 中执行 python popen.read
- android - 如果我不想实现 FirebaseMessagingService,是否有替代 onNewToken 的方法?
- c++ - 如何在 C++11 中以与 C++03 中相同的方式使用 errno
- outlook - 如何格式化 ical 和 Outlook 日历的日期时间
- c - 递归检查子文件夹以获取其他 make 文件
- python - ImportError:没有名为 functools_lrc_cache 的模块(discord.py bot)