亲爱的stackoverflowers:)
我在node.js上做了我的第一个mvc应用程序,遇到了这样一个问题:
有时候,当我很长时间(大约3分钟)没有对数据库进行任何查询,并尝试进行一次查询时,我会出现这样的错误:“此套接字已被对方终结”
我发现,这是因为等待超时选项在mysql配置关闭连接,如果停机时间超过价值
所以我应该在每次查询数据库之前检查连接是否打开,这是正确的吗?如果我应该,怎么做,在哪里?
这是我的数据库连接文件:
const mysql = require('mysql2');
// create the connection to database
const connection = mysql.createConnection({
host: 'localhost',
user: 'mysql',
password: 'mysql',
database: 'qa'
});
exports.connect = (done) => {
connection.connect((err) =>{
if(err){
console.log('db connection error');
}
else{
done()
}
})
}
exports.connection = connection;
这是我的一个模型的一部分:
const db = require('../db');
exports.makeNewQuestion = async (topic, text, subsection, user) => {
return db.connection.promise().execute("INSERT INTO `questions` (`topic`, `text`,
`subsection_id`, `user_id`) VALUES (?, ?, ?, ?)", [topic, text, subsection, user]);
}
2条答案
按热度按时间piwo6bdm1#
据我所知,你不需要一个查询一个现有的表来检查连接/你可以使用这样的东西:
如果你这样做,你是连接。
通常情况下,您不需要这种方法,除非您需要长期保持连接打开。根据您正在使用的库,您可以收到Promise返回。每次查询数据库时,您可能希望检查promise是否被拒绝,并相应地处理问题。
bjg7j2ky2#
事实证明,在
mysql2
包中,当连接关闭时,它将变得未定义。所以实际上要弄清楚它们之间是否有联系是很简单的。这是我目前用来保持一个连接活动的代码:
因此,您需要做的就是从另一个文件调用
getConnection()
,它将返回一个现有的连接,或者在连接关闭时返回一个新的连接。