express中使用mysql ,运行长时间之后报read ECONNRESET
以下是使用了connect和end 的情况
exports.login = async (req, res, next) => {
try {
const username = req.body.reqdata.username;
const password = req.body.reqdata.password;
const sql = `select * from user where loginid='${username}' and password ='${password}'`;
//console.log(sql)
db.connect()
db.query(sql, (err, results, fields) => {
console.log(results);
console.log(err);
if (err) {
res.send({
err: err.message,
});
}
if (results.length > 0) {
//生成token,并且在返回数据中返回,设置了60S失效的token
const token = jwt.sign(req.body, "dsj", { expiresIn: 36000 });
res.send({
message: 0,
data: results,
token: token,
});
} else {
res.send({
message: 1,
data: results,
});
}
});
db.end()
} catch (err) {
next(err);
}
};
在每个请求中使用connect和end会导致只有第一次请求有返回,后续请求都报Cannot enqueue Handshake after invoking quit
如果不适用connect和end开启的时候能运行一段时间,长时间之后就报read ECONNRESET。
查阅了很多文章,尝试了在每次连接之后调用end来结束连接,这样就会导致只能第一次连接成功,后续的都失败,即使在每个请求之前重新使用connect也不行,很多文章说去掉end让mysql自己放掉连接,但这又会导致运行一段时间之后报read ECONNRESET。陷入了死循环,求解如何能解决上述问题并稳定运行?