Node.js异步方式操作MySQL数据

上篇介绍了MySQL的基本的操作API,又在某篇介绍了Node.js的异步编程方式。本篇介绍如何异步操作MySQL数据库。

/**
 * MySQL数据库异步操作
 */

const util = require("util");

const sql = require("mysql2");

const co = require("co");

//加载数据库驱动模块
const sqlPromise = require("mysql2/promise");

//------使用sql2/promise对象异步操作数据库----------
const  pool = sqlPromise.createPool({
    host:"localhost",
    user:"root",
    password:"wlq0MySQL@",
    database:"studentdb"
});

pool.getConnection().then((conn)=>{
    let res = conn.query("select * from student");
    conn.release();
    return res;
}).then((res)=>{
   console.log("====sql2/promise数据库查询结果如下=======");
   console.log(util.inspect(res[0]));
}).catch((err)=>{
   console.log("连接时或查询时错误:"+err);
});

//-------------使用co模块异步操作数据库------------
co(function*(){
    let conn = yield sqlPromise.createConnection({
        host:"localhost",
        user:"root",
        password:"wlq0MySQL@",
        database:"studentdb"       
    });

    let res = yield conn.query("select * from student");
    console.log("=========co模块查询结果如下========");
    console.log(util.inspect(res[0]));

    yield conn.end();
});

//---------------使用async/await函数异步操作数据库------------
async function getStudentInfos()
{
    let pool = sqlPromise.createPool({
        host:"localhost",
        user:"root",
        password:"wlq0MySQL@",
        database:"studentdb"           
    });

    let res = await pool.query("select * from student");
    
    await pool.end();

    return res;
}

getStudentInfos().then((res)=>{
    console.log("=========async/await查询结果如下========");
    console.log(util.inspect(res[0]));
}).catch((err)=>{
    console.error("async/await查询错误"+err);
})

运行结果如下:

把“嵌套”异步操作,通过Promse对象、co模块或async/await函数变成“同步/串行”编写方式。本质没变,代码编写方式改变,便于理解阅读。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Data菌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值