koa2整合mysql

Posted 萝卜爱吃肉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了koa2整合mysql相关的知识,希望对你有一定的参考价值。

引入mysql

npm install mysql

封装mysql

创建mysql.js文件放在utils(工具包)中
使用pool连接池
mysql.js
//封装mysql
const mysql = require('mysql')
let pools = {}//连接池
let query = (sql, callback, host = '127.0.0.1') => {
    if (!pools.hasOwnProperty(host)) {//是否存在连接池
        pools[host] = mysql.createPool({//不存在创建
            host: host,
            port: '3306',
            user: 'root',
            password: '',
            database: ''//数据库名
        })
    }
    pools[host].getConnection((err, connection) => {//初始化连接池
        connection.query(sql, (err, results) => {//去数据库查询数据
            callback(err, results)//结果回调
            connection.release()//释放连接资源 | 跟 connection.destroy() 不同,它是销毁
        })
    })
}

module.exports = query

引入mysql.js

在app.js中
/*
 通过一个中间件,把所有的工具关联起来
*/
app.use(async (ctx, next) => {
  //挂载到util中
  ctx.util = {
    mysql: require('./utils/mysql')
  }
  await next()
})

使用

// 操作数据库
ctx.util.mysql('select * from test', function (err, results) {
    console.log(results);//返回的数据
    console.log(results[0].id);//获取返回数据中的id([0]代表取第一条中的id)
})

不使用连接池

const mysql = require('mysql')

// 连接 mysql 服务器
const connection = mysql.createConnection({
    host: '127.0.0.1',
    port: '3306',
    user: 'root',
    password: '',
    database:''
})

// 执行SQL
connection.query(sql, function (err, result) {
  err // 错误信息
  result // 结果
})

// 销毁连接 | 由于 JS 是异步的,所以当前代码会在执行 SQL 之前就销毁了连接
connection.destroy()

尾声

用 createConnection 创建 Mysql 连接,每执行一次 connection.query 都是一个全新的连接,会造成一个资源的极大浪费,降低性能。
连接池是另外的一种执行方法,它一次性的创建了多个连接,然后根据客户端的查询,自动的 分发、复用、管理 这些连接。
引用至https://www.jmjc.tech/less/113

引入mysql包

npm install mysql

封装mysql

创建mysql.js文件放在utils(工具包)中
使用pool连接池
mysql.js
//封装mysql
const mysql = require('mysql')
let pools = {}//连接池
let query = (sql, callback, host = '127.0.0.1') => {
    if (!pools.hasOwnProperty(host)) {//是否存在连接池
        pools[host] = mysql.createPool({//不存在创建
            host: host,
            port: '3306',
            user: 'root',
            password: '',
            database: ''//数据库名
        })
    }
    pools[host].getConnection((err, connection) => {//初始化连接池
        connection.query(sql, (err, results) => {//去数据库查询数据
            callback(err, results)//结果回调
            connection.release()//释放连接资源 | 跟 connection.destroy() 不同,它是销毁
        })
    })
}

module.exports = query

引入mysql.js

在app.js中
/*
 通过一个中间件,把所有的工具关联起来
*/
app.use(async (ctx, next) => {
  //挂载到util中
  ctx.util = {
    mysql: require('./utils/mysql')
  }
  await next()
})

使用

// 操作数据库
ctx.util.mysql('select * from test', function (err, results) {
    console.log(results);//返回的数据
    console.log(results[0].id);//获取返回数据中的id([0]代表取第一条中的id)
})

不使用连接池

const mysql = require('mysql')

// 连接 mysql 服务器
const connection = mysql.createConnection({
    host: '127.0.0.1',
    port: '3306',
    user: 'root',
    password: '',
    database:''
})

// 执行SQL
connection.query(sql, function (err, result) {
  err // 错误信息
  result // 结果
})

// 销毁连接 | 由于 JS 是异步的,所以当前代码会在执行 SQL 之前就销毁了连接
connection.destroy()

尾声

用 createConnection 创建 Mysql 连接,每执行一次 connection.query 都是一个全新的连接,会造成一个资源的极大浪费,降低性能。
连接池是另外的一种执行方法,它一次性的创建了多个连接,然后根据客户端的查询,自动的 分发、复用、管理 这些连接。
引用至https://www.jmjc.tech/less/113

双十一?不存在的,只有加班使我快乐,苦笑.ing

以上是关于koa2整合mysql的主要内容,如果未能解决你的问题,请参考以下文章

CentOS 环境 Node + Koa2 连接 MySQL (ECS系列三)

好课分享: Node.js+Koa2+MySQL打造前后端分离精品项目《旧岛》 百度云

初入koa2 -连接数据库(遇到的坑之一)

koa2实现session的两种方式(基于Redis 和MySQL)

全栈编程系列SpringBoot整合Shiro(含KickoutSessionControlFilter并发在线人数控制以及不生效问题配置启动异常No SecurityManager...)(代码片段

koa2 进阶网站