引入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
项目使用中发现还可以继续封装,如下

以上写法返回给前端需套在Promise中

为了少写代码,再次封装
//封装mysql
const mysql = require('mysql')
let pools = {}//连接池
let query = (sql, host = '127.0.0.1') => {
if (!pools.hasOwnProperty(host)) {//是否存在连接池
pools[host] = mysql.createPool({//不存在创建
host: host,
port: '3306',
user: 'root',
password: 'mysqlroot',
database: 'blog'
})
}
return new Promise((resolve, reject) => {
pools[host].getConnection((err, connection) => {//初始化连接池
if (err) console.log(err,'数据库连接失败');
else connection.query(sql, (err, results) => {//去数据库查询数据
connection.release()//释放连接资源
if (err) reject(err);
else resolve(results);
})
})
})
} module.exports = query

app.js中引用 上面有

使用

router.get('/', async (ctx, next) => {
await ctx.util.mysql(`select * from test`).then((res) => {
console.log(res);
ctx.body = res;//返回给前端的数据
})
await next()
})

koa2整合mysql的更多相关文章

  1. Spring-Data-JPA整合MySQL和配置

    一.简介 (1).MySQL是一个关系型数据库系统,是如今互联网公司最常用的数据库和最广泛的数据库.为服务端数据库,能承受高并发的访问量. (2).Spring-Data-Jpa是在JPA规范下提供的 ...

  2. 在eclipse中构建solr项目+添加core+整合mysql+添加中文分词器

    最近在研究solr,这里只记录一下eclipse中构建solr项目,添加core,整合mysql,添加中文分词器的过程. 版本信息:solr版本6.2.0+tomcat8+jdk1.8 推荐阅读:so ...

  3. Springboot项目搭建(1)-创建,整合mysql/oracle,druid配置,简单的CRUD

    源码地址:https://github.com/VioletSY/article-base 1:创建一个基本项目:https://blog.csdn.net/mousede/article/detai ...

  4. vs整合MySQL和QT

    23:37:23 2019-08-12 尝试用vs写一个程序整合MySQL和QT 参考资料:https://blog.csdn.net/qq_35987486/article/details/8406 ...

  5. koa2+koa-generator+mysql快速搭建nodejs服务器

    koa2+koa-generator+mysql快速搭建nodejs服务器 用koa的脚手架koa-generator可以快速生成项目骨架,可以用于发开或者测试接口 https://github.co ...

  6. Redis整合MySQL和MyCAT分库组件(来源是我的新书)

    MyCAT是一个开源的分布式数据库组件,在项目里,一般用这个组件实现针对数据库的分库分表功能,从而提升对数据表,尤其是大数据库表的访问性能.而且在实际项目里,MyCAT分库分表组件一般会和MySQL以 ...

  7. 全文检索引擎Solr系列——整合MySQL、MongoDB

    MySQL 拷贝mysql-connector-java-5.1.25-bin.jar到E:\solr-4.8.0\example\solr-webapp\webapp\WEB-INF\lib目录下面 ...

  8. c3p0整合mysql报错问题

    启动报错: [com.mchange.v2.c3p0.DriverManagerDataSource] - Could not load driverClass com.mysql.cj.jdbc.D ...

  9. springboot jpa mongodb 整合mysql Field in required a bean of type that could not be found Failed to load ApplicationContext

    1.完整报错 *************************** APPLICATION FAILED TO START *************************** Descripti ...

  10. Spring学习总结(18)——Spring整合Mysql数据库一主多从、多主多从配置

    一.新建jdbc.properties配置文件 master.jdbc.driverClassName=com.mysql.jdbc.Driver master.jdbc.url=jdbc:mysql ...

随机推荐

  1. 使用 lspci 和 setpci 调试 PCIe 问题

    lspci 命令和 setpci 命令均为 Linux 发行版中原生可用的命令. 这 2 条命令均可提供多级输出,适合在不同时间点用于查看 PCI 总线上训练的不同组件的功能和状态.其中大部分功能均可 ...

  2. valueOf与toString

    valueOf与toString valueOf和toString是Object.prototype上的方法,在Js几乎所有的对象都会继承自Object,同样由于包装对象的原因,几乎所有的数据类型都能 ...

  3. SpringCloud 注册中心Consul实战

    介绍 Consul是HashiCorp公司推出的开源工具,Consul由Go语言开发,部署起来非常容易,只需要极少的可执行程序和配置文件,具有绿色.轻量级的特点.Consul是分布式的.高可用的. 可 ...

  4. Java中的POJO是什么?

    1.介绍 在这个简短的教程中,我们将研究"普通Java对象"(Plain Old Java Object)的定义,简称POJO.我们将看看POJO与JavaBean的比较,以及如何 ...

  5. oracle FGAC(细粒度访问控制)介绍

    在ORACLE中,RLS有时也叫做虚拟私有数据库(VPD)或者细粒度访问控制(FGAC). RLS由8i引进,利用这一特性我们可以对表定义安全策略(并且指明对表的操作类型),实现对用户可以看到或者修改 ...

  6. Redis原理学习:Redis主体流程分析

    转自:七把刀 https://www.jianshu.com/p/427cf97d7951 网上分析Redis源码的文章挺多,如黄健宏的<Redis设计与实现>就很详尽的分析了redis源 ...

  7. leetcode 平衡二叉树

    给定一个二叉树,判断它是否是高度平衡的二叉树. 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 . 示例 1: 输入:root = [3,9,20,n ...

  8. error接口

    // 实际上它是interface类型,这个类型有一个返回错误信息的单一方法: type error interface{ Error() string } 创建一个error最简单的方法就是调用er ...

  9. 在矩池云上使用R和RStudio

    租用机器 在矩池云租用机器的时候,系统环境里搜索:R,选择 R4.2 镜像,如果需要使用RStudio,还需要在高级选项中新增一个自定义端口:8787,然后点击租用即可. 使用 JupyterLab ...

  10. 【Azure Developer】如何用Microsoft Graph API管理AAD Application里面的Permissions

    问题描述 如何用Microsoft Graph API给应用添加Microsoft Graph Application Permission 解决方法 一:首先获取Microsoft Graph Ap ...