这个问题通常是因为程序在关闭数据库连接后尝试再次发出查询请求,但由于连接已关闭,因此无法发出任何请求。可以尝试使用连接池技术来避免这个问题,或者在每个请求结束后明确地关闭连接。以下是一个示例:
const mysql = require('mysql');
const pool = mysql.createPool({
connectionLimit: 10,
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME
});
exports.handler = async (event) => {
try {
const connection = await getConnection();
const result = await query(connection, 'SELECT * FROM messages');
await release(connection);
return result;
} catch (err) {
console.log(err);
throw err;
}
};
function getConnection() {
return new Promise((resolve, reject) => {
pool.getConnection((err, connection) => {
if (err) {
return reject(err);
}
resolve(connection);
});
});
}
function query(connection, sql) {
return new Promise((resolve, reject) => {
connection.query(sql, (err, result) => {
if (err) {
return reject(err);
}
resolve(result);
});
});
}
function release(connection) {
return new Promise((resolve, reject) => {
connection.release((err) => {
if (err) {
return reject(err);
}
resolve();
});
});
}
在这个示例中,首先创建了一个连接池,然后在每个请求的处理程序中获取连接,并在查询结束后释放连接。这样可以确保连接只在需要时打开,并在不需要时关闭。