截止到今天,mysqljs在github上已经获取到了10000+star了,可以说是实实在在最流行的mysql驱动了,但是要把mysqljs应用到koa2中,似乎不太方便,koa2使用最新的语法async, await,而mysqljs,却还停留在callback阶段。

今天这篇文章就是要解决这个问题,非常简单。

1、实际开发中,我们肯定是使用连接池的形式,所以,我们选择了mysql.createPool这个方法:

var mysql = require('mysql');

var pool = mysql.createPool(...);

pool.getConnection(function(err, connection) {

// Use the connection

connection.query('SELECT something FROM sometable', function (error, results, fields) {

// And done with the connection.

connection.release();

// Handle error after the release.

if (error) throw error;

// Don't use the connection here, it has been returned to the pool.

});

});

2、使用Promise,对上面的方法稍加改造即可:

var mysql = require('mysql');

var pool = mysql.createPool(...);

const q = function (sql, values) {

return new Promise((resolve, reject) => {

pool.getConnection((err, conn) => {

if (err) return reject(err)

conn.query(sql, values, (err, rows) => {

if (err) reject(err)

else resolve(rows)

conn.release()

})

})

})

}

经过以上封装,一个查询用户信息的操作就可以这样优雅的完成了:

async function getUserInfoById(id) {

let userInfo = await q('select * from user where id=?', [id])

console.log(userInfo)

}

3、受tornado的一个mysql操作库torndb的启发,可以这样做一个完整的封装:

const mysql = require('mysql')

const defautConfig = {

host: 'localhost',

user: 'root',

password: '',

database: 'test',

connectionLimit: 20

}

const AsyncMysqljs = function(config=defautConfig){

const pool = mysql.createPool(config)

const q = function (sql, values) {

return new Promise((resolve, reject) => {

pool.getConnection((err, conn) => {

if (err) return reject(err)

conn.query(sql, values, (err, rows) => {

if (err) reject(err)

else resolve(rows)

conn.release()

})

})

})

}

/*

从数据库中查询一条数据,返回值是对象,而非数组

最好在sql语句中加一个唯一的限制条件

*/

const get = (sql, values) => {

try {

return q(sql, values).then(rows => {

if (rows.length >= 1) {

return rows[0]

}

})

} catch (err) {

return new Promise((resolve, reject) => {

reject(err)

})

}

}

return {query: q, delete: q, update: q, insert: q, execute: q, get}

}

module.exports = AsyncMysqljs

具体代码请查看我的github项目asyncmysqljs,欢迎给建议或者star。

koa2 mysql 事务_mysqljs在koa2中的正确姿势相关推荐

  1. mysqljs在koa2中的正确姿势

    截止到今天,mysqljs在github上已经获取到了10000+star了,可以说是实实在在最流行的mysql驱动了,但是要把mysqljs应用到koa2中,似乎不太方便,koa2使用最新的语法as ...

  2. mysql事务操作代码_Mysql中事务的使用【mysql】

    一,概述 1,作用 主要用户操作处理量大,复杂度高的数据.要保证sql语句,要么全执行,要么全不执行,但它必须要满足四个条件:原子性,一致性,隔离性,持久性. 2,方法 事务有两种处理方法 [用 BE ...

  3. 《深入理解分布式事务》第二章 MySQL 事务的实现原理

    shua# <深入理解分布式事务>第二章 MySQL 事务的实现原理 文章目录 一.Redo Log 1.Redo Log 基本概念 2.Redo Log 基本原理 3.Redo Log ...

  4. 【Django 天天生鲜项目05】订单(Mysql事务、并发处理、支付宝支付、评论)

    本部分涉及订单的生成.并发处理.支付.评论等 关键:MySQL事务.并发处理的悲观锁/乐观锁.支付宝SDK 的使用...... 仅作为个人笔记! 目录 2.创建订单 3.订单生成 3.1. MySQL ...

  5. mysql事务怎么用,MySQL事务的使用

    在上篇文章 MySQL 事务的隔离级别 中已经提到了事务的特性.事务的隔离级别及各个隔离级别可能导致的问题,下面来说说MySQL中事务的使用 MySQL 事务简单使用 # 查看事务自动提交的模式 sh ...

  6. vue2 通过 axios  访问koa2,从mysql 拿到数据更新vue2中的内容

    vue2 通过 axios  访问koa2,从mysql 拿到数据更新vue2中的内容 axios 类似ajax 注意红色字体 node --inspect index.js (启用debug模式) ...

  7. koa2 mysql sequelize_使用nodejs-koa2-mysql-sequelize-jwt 实现项目api接口

    nodejs-koa2-mysql-sequelize-jwt 技术栈:nodejs, koa2, mysql, sequelize, jwt 项目数据层和操作层分明 使用koa2框架中间件,参数处理 ...

  8. 分享Node.js + Koa2 + MySQL + Vue.js 实战开发一套完整个人博客项目网站

    这是个什么的项目? 使用 Node.js + Koa2 + MySQL + Vue.js 实战开发一套完整个人博客项目网站. 博客线上地址:www.boblog.com Github地址:https: ...

  9. Mysql 事务中Update 会锁表吗?

    Mysql 事务中Update 会锁表吗? 两种情况: 1.带索引 2.不带索引 前提介绍: 方式:采用命令行的方式来模拟 1.mysq由于默认是开启自动提交事务,所以首先得查看自己当前的数据库是否开 ...

最新文章

  1. 关于SQL Server 2017中使用json传参时解析遇到的多层解析问题
  2. SANS:2012年度日志管理调查报告
  3. 厉害!Java集合框架综述,这篇让你吃透!
  4. SpringMVC的请求-获得请求参数-获得POJO类型参数
  5. Android开发(1) | Fragment 的应用——新闻应用
  6. 申通完美支撑“双11”——亿级包裹背后的云基础设施
  7. 广告清除:Adware Zap Browser Cleaner for mac
  8. C++《STL和泛型编程》算法accumulate、for_each、sort简单使用例子
  9. bar图设置距离 python_Python可视化分析:学会Matplotlib这几点就够了
  10. ubuntu 如何确定虚拟机中的网关_如何在虚拟机中安装Kali Linux
  11. linux 截图软件安装,Ubuntu 安装截图工具Shutter,并设置快捷键 Ctrl+Alt+A
  12. 西门子real是什么数据类型_西门子PLC数据类型
  13. 天轰穿·甜老丝儿。科创少年
  14. GPU并行运算与CUDA编程--基础篇
  15. HHL,AL;非结合朱顶红凝集素(HHL,AL)
  16. 浏览器pdf朗读插件
  17. k8s.gcr.io的镜像无法下载的问题
  18. 智能车浅谈——手把手让车跑起来(电磁篇)
  19. Gitlab-runner 构建失败问题排查
  20. 南大计算机博士黄鑫,南京大学软件学院张贺教授团队在经验软件工程方法学研究中取得重要成果...

热门文章

  1. Mybatis源码笔记之浅析ParameterHandler
  2. python实现字母的加密和解密 字典_python实现AES加密与解密
  3. 基于ASP.net的电力系统分析精品课程网站
  4. 转 基于ssm的Bootstrap-table的学习演示
  5. Python项目生成requirements.txt的多种方式
  6. OSI七层与TCP/IP四层模型
  7. MailBee.NET Objects接收电子邮件(POP3)教程一:接收简单的电子邮件
  8. (转)用 Maven 部署 war 包到远程 Tomcat 服务器
  9. 不要过打折的生活,当你发现这些你有了,说明你开始成熟了
  10. 我的linux复习之一密码修改