我目前正在我的树莓上实现一个小的个人项目。我的web应用程序向我的后端发送一个POST请求,它查询数据库。第一次查询总是很好,但在第二次查询时,数据库不再被选中,我得到一个错误。作为证明,下图显示了两个连续的“SELECT DATABASE()”查询。
我将代码拆分为main、server和db文件,这样我的代码就干净了。
// db.js
require('dotenv').config();
const mariadb = require('mariadb');
const pool = mariadb.createPool({
host: 'demez.asuscomm.com',
user: process.env.MARIADB_USER,
password: process.env.MARIADB_PW,
connectionLimit: 5
});
// connect()
async function connect() {
try {
await pool.getConnection();
// select default db
await pool.query('USE athletepresencelist');
} catch (err) {
console.log(err);
}
}
// query()
async function querydb(query) {
try {
// await pool.query('USE athletepresencelist');
return await pool.query(query);
} catch (err) {
console.log(err);
}
}
module.exports = {
connect, querydb
}
正如您所看到的,当我连接到MariaDB时,我也选择了数据库,但是正如在db.js文件外使用'querydb()'函数进行第二次查询时所述,它取消了我之前选择的数据库。有什么建议吗?为什么要这样做,以及我如何修复它?我已经尝试在实际查询之前放置USE数据库,但它不起作用
1条答案
按热度按时间zour9fqk1#
问题
问题是连接池默认情况下不“使用”数据库。当创建数据库连接池时,它将创建一定数量的到数据库的连接,每个连接都有自己的状态。当在connect函数中执行
USE database;
时,它可能只在这些连接中的一个连接中运行,各种数据库池实现处理如何使用连接,但可以安全地假设这就是这里正在发生的事情。溶液
通过修改连接到数据库的方式,可以很容易地解决此问题: