引入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. Python递归遍历目录并删除文件中的前N行

    1 import os 2 3 # 遍历目录下的所有文件 4 def check_file(file_path): 5 os.chdir(file_path) 6 print(os.path.absp ...

  2. 【OpenGL ES】渐变凸镜贴图

    1 前言 ​ 正方形图片贴到圆形上 中将正方形图片上的纹理映射到圆形模型上,凸镜贴图 中介绍了将圆形图片上的纹理映射到凸镜模型上.如果将原图片逐渐变为凸镜效果,中间的变化过程又是什么样的? ​ 图片的 ...

  3. CompletableFuture使用自定义线程池实现多任务结果聚合返回

    为什么要使用自定义线程池? 默认线程池缺点 1.CompletableFuture默认使用的线程池是 ForkJoinPool.commonPool(),commonPool是当前 JVM(进程) 上 ...

  4. ERROR 1820 (HY000): You must reset your password using ALTER USER statement

    新安装好的mysql5.7数据库,用root登录以后执行操作报这个错. 解决方法: mysql> alter user 'root'@'localhost' identified by 'roo ...

  5. dp题单——区间dp

    一.基本概念 1.链式区间dp for(int len = 2; len <= n; len++){ //枚举区间长度 for(int i = 1; i + len - 1 <= n; i ...

  6. 编译安装c2工具sliver以及python 客户端sdk

    背景: 项目需要安装sliver服务端和客户端还有sliver的python sdk: git clone https://github.com/BishopFox/sliver.git cd sli ...

  7. windows 上 ffmpeg 库的安装

    真复杂啊 安装 ffmpeg 库有两种途径,一种是自己下载源码再去编译,另一种是使用 vcpkg 自动安装 一般情况下,第二种是最简单方便的,但是如果你需要使用 ffmpeg 的特定历史版本,那就有点 ...

  8. String--cannot convert from 'const char *' to 'LPTSTR'错误

    这种错误,很多情况下是类型不匹配 LPTSTR表示为指向常量TCHAR字符串的长指针 TCHAR可以是wchar_t或char,基于项目是多字节还是宽字节版本. 看下面的代码,代码来源:Example ...

  9. win32-UI Automation

    使用UI Automation遍历窗口的所有控件标题和类 #include <Windows.h> #include <stdio.h> #include <UIAuto ...

  10. zip压缩模块,tarfile压缩模块,包和模块,format格式化的复习--day17

    1.zipfile模块 import zipfile #导入模块 1.压缩文件 (1)创建压缩包 参数1压缩包名字,参数2以w模式创建,参数3压缩固定写法 zf = zipfile.ZipFile(& ...