博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nodejs 优雅的连接 mysql
阅读量:5289 次
发布时间:2019-06-14

本文共 1698 字,大约阅读时间需要 5 分钟。

1.mysql 及 promise-mysql

nodejs 连接 mysql 有成熟的npm包 mysql ,如果需要promise,建议使用 promise-mysql;

npm:  

          

在实际开发中,单独的connection 并不能满足业务需要,需要使用连接池进行连接的建立及释放,promise-mysql 建立连接池非常简单:

1 const config = { 2     host:'xxxxxx',  // ip也行域名也行 3     user:'root', 4     password:'123456', 5     connectionLimit:30, 6     database:'movie', // database 7     port:'8306' 8 }; 9 // 建立连接池10 const pool = mysql.createPool(config);11 // 使用pool.query 快速连接执行sql12 pool.query('xxxx');13  14 // 用using/dispsoer 模式构建自动释放资源的连接15 function getSqlConnection(){16     return pool.getConnection().disposer((c)=>{17         pool.releaseConnection(c);18     });19 }20 // 需要使用bluebird 封装具有dispsoer功能的promise对象21 function query(sql){22     return Promise.using(getSqlConnection(),(con)=>{23         return sql?con.query(sql):con;24     })25 }

经过对mysql 连接的promise封装,我们可以使用async/await方式进行愉快的编程

2.通过promise-mysql执行事务

通过connection对象的beginTransaction、commit 及 rollback 即可实现

1 async function execAffairs(){ 2     console.log('begin execAffairs'); 3      // 写事务 4     const conn = await query(); 5     await conn.beginTransaction(); // begin; 6     try{ 7         await conn.query('select * from movie_detail where m_id=242167 for update'); 8         await conn.query('update movie_detail set m_record=7.5 where m_id=242167'); 9         await conn.commit();// commit10         console.log('commit 完毕');11     } catch(e){12         console.log('事务出错',e);13         await conn.rollback();14     }15    /******16      // 无需release17      finally{18         conn.release();19      }20    */21 }

由于本示例使用了promise-mysql 的disposer 模式,所以无需额外处理 连接的 release

 

相关代码请见:https://github.com/JhoneLee/nodeScheduleMySql

转载于:https://www.cnblogs.com/JhoneLee/p/9300395.html

你可能感兴趣的文章
第十六章、数据库之多表关系
查看>>
第十五章、线程之queue模块的各种队列
查看>>
Mysql总结
查看>>
第十五章、线程池和进程池
查看>>
第十六章、单表查询、多表查询
查看>>
<一> idea+gradle+springboot创建项目
查看>>
解决 "Could not autowire. No beans of 'SationMapper' type found" 的问题
查看>>
P3383 【模板】线性筛素数
查看>>
P1021 邮票面值设计
查看>>
#574. 桂林的文件
查看>>
#554. 正则表达式
查看>>
P3719 [AHOI2017初中组]rexp
查看>>
P2970 [USACO09DEC]自私的放牧Selfish Grazing
查看>>
P1095 守望者的逃离
查看>>
P3884 [JLOI2009]二叉树问题
查看>>
P2014 选课
查看>>
P2709 小B的询问
查看>>
P4438 [HNOI/AHOI2018]道路
查看>>
P1270 “访问”美术馆
查看>>
P2986 [USACO10MAR]伟大的奶牛聚集Great Cow Gather
查看>>