koa 项目中引入 mysql

由于mysql模块的操作都是异步操作,每次操作的结果都是在回调函数中执行,现在有了async/await,就可以用同步的写法去操作数据库

Promise封装mysql模块

Promise封装 ./async-db.js
const mysql = require('mysql')
const pool = mysql.createPool({
  host     :  '127.0.0.1',
  user     :  'root',
  password :  '123456',
  database :  'my_database'
})

//将数据库的异步操作,封装在一个Promise中
let query = function( sql, values ) {
  return new Promise(( resolve, reject ) => {
    pool.getConnection(function(err, connection) {
      if (err) {
        reject( err )
      } else {
        connection.query(sql, values, ( err, rows) => {
          if ( err ) {
            reject( err )
          } else {
            resolve( rows )
          }
          connection.release()
        })
      }
    })
  })
}

module.exports = { query }
async/await使用Promise封装的mysql,开发自己的中间件./getdata.js
const { query } = require('./async-db');
//引用封装的mysql模块,来开发获取数据的中间件:
function getData(){
  return async (ctx, next) => {
     let sql = 'SELECT * FROM my_table';
     // await等待query查询数据库,Promise异步操作完成后,通过resolve()返回查询到的数据列表
     let dataList = await query( sql );
     if(dataList[0]){  //数据不为空
       //返回响应状态吗和响应信息
       ctx.status = 200;
       ctx.body = {code: 1, msg: 'query database success'}
     }else{
       ctx.status = 200;
       ctx.body = {code: 0, msg: 'query database error'}
     }
  }
}

module.exports = { getData, }
Koa应用中使用中间件
const Koa = require('koa');
const router = require('koa-router')();
const bodyParser = require('koa-bodyparser');
const {getData} = require('./getdata');
const app = new Koa();
app.use(bodyParser());  //启用koa-bodyparser,需要它来获取post数据

router.get('/login', getData());

app.use(router.routs);
app.use(router.allowedMethods());
app.listen(2000);

.

转载于:https://www.cnblogs.com/crazycode2/p/11374509.html

Koa2框架使用MySQL2连接数据库的步骤如下: 1. 首先,安装所需的依赖包。执行以下命令以安装koa2和mysql2: ``` npm install koa@2 mysql2 ``` 2. 在你的代码引入所需的模块和配置数据库连接。以下是一个简单示例: ```javascript const Koa = require('koa'); const mysql = require('mysql2/promise'); const app = new Koa(); // 创建数据库连接池 const pool = mysql.createPool({ host: 'localhost', // 数据库主机名 user: 'root', // 数据库用户名 password: 'password', // 数据库密码 database: 'mydatabase' // 数据库名称 }); // 在间件使用数据库连接 app.use(async (ctx, next) => { try { // 从连接池获取连接 const connection = await pool.getConnection(); // 执行查询等操作 const [rows, fields] = await connection.execute('SELECT * FROM mytable'); // 释放连接 connection.release(); // 将查询结果传递给下一个间件或响应给客户端 ctx.body = rows; } catch (err) { // 错误处理 console.error(err); ctx.status = 500; ctx.body = 'Internal Server Error'; } }); // 启动服务器 app.listen(3000, () => { console.log('Server is running on port 3000'); }); ``` 在上面的示例,我们使用`mysql2/promise`模块创建了一个数据库连接池,并在每个请求的间件使用连接池来执行数据库操作。请根据你的实际情况修改数据库的连接信息和查询语句。 这只是一个简单的示例,你可以根据自己的需求进行更复杂的操作和优化。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值