Javascript 节点js mysql2-重用连接
对不起,我用的是翻译。我希望你能理解 我在使用mysql模块时感到好奇。首先看一下代码Javascript 节点js mysql2-重用连接,javascript,mysql,node.js,Javascript,Mysql,Node.js,对不起,我用的是翻译。我希望你能理解 我在使用mysql模块时感到好奇。首先看一下代码 db_promise.js 创建一个池 constmysql=require('mysql2'); 常量配置={ 主机:process.env.DB_主机, 用户:process.env.DB_用户, 密码:process.env.DB_PW, 数据库:process.env.DB_NAME, 连接限制:100, 上限:10000, 多重陈述:正确, waitForConnections:对, 日期字符串:“
db_promise.js
创建一个池
constmysql=require('mysql2');
常量配置={
主机:process.env.DB_主机,
用户:process.env.DB_用户,
密码:process.env.DB_PW,
数据库:process.env.DB_NAME,
连接限制:100,
上限:10000,
多重陈述:正确,
waitForConnections:对,
日期字符串:“日期”
}
const createPool=mysql.createPool(配置,(错误)=>{
控制台错误(err);
});
const pool=createPool.promise();
module.exports=池;
run.js
功能A
创建连接,使用后将其传递给功能B
,然后继续使用
constpool=require('./db_promise.js');
常量A=async()=>{
让康涅狄格州;
试一试{
conn=wait pool.getConnection();
等待conn.query('do stuff1..);
等待B(康涅狄格州);
返回;
}捕获(e){
控制台错误(e);
}最后{
控制释放();
}
}
常数B=异步(连接)=>{
试一试{
等待conn.query('do stuff 2..);
返回;
}捕获(e){
投掷e;
}
}
为每个函数创建连接将是一种浪费。当一个连接是关联函数时,它只能被重用吗?您不需要每次都获取和释放一个连接。这由
池
功能自动处理,当查询解析时,连接将自动释放。使用池连接的查询也支持Promise功能。更多细节:谢谢你的评论。你是说我可以只使用一个声明的池在多个函数中处理查询吗?当我使用事务处理时,我不需要获得新连接吗?是的。从模块文档中:池不会预先创建所有连接,而是根据需要创建连接,直到达到连接限制。
默认的connectionLimit
为10
。如果您认为您将同时执行更多的操作,则应增加限制数量。只需创建池,然后根据需要运行查询。我使用的是mysqljs
(不是mysql2
),但它们实际上是相同的-一般来说,getConnection可以省略,但其他示例表明必须在事务中调用getConnection。我学到了一些新东西。谢谢你,我爱你。是的,这可能会让人困惑,尤其是在处理交易时。这就是为什么我更喜欢mysqljs
而不是mysql2
-it。最终,mysql2
将被弃用,mysqljs
将成为节点
的主要解决方案。从mysql2
readme:mysql2团队正在与mysqljs/mysql团队合作,找出共享代码并将其转移到mysqljs组织下