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
项目使用中发现还可以继续封装,如下
以上写法返回给前端需套在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的更多相关文章
- Spring-Data-JPA整合MySQL和配置
一.简介 (1).MySQL是一个关系型数据库系统,是如今互联网公司最常用的数据库和最广泛的数据库.为服务端数据库,能承受高并发的访问量. (2).Spring-Data-Jpa是在JPA规范下提供的 ...
- 在eclipse中构建solr项目+添加core+整合mysql+添加中文分词器
最近在研究solr,这里只记录一下eclipse中构建solr项目,添加core,整合mysql,添加中文分词器的过程. 版本信息:solr版本6.2.0+tomcat8+jdk1.8 推荐阅读:so ...
- Springboot项目搭建(1)-创建,整合mysql/oracle,druid配置,简单的CRUD
源码地址:https://github.com/VioletSY/article-base 1:创建一个基本项目:https://blog.csdn.net/mousede/article/detai ...
- vs整合MySQL和QT
23:37:23 2019-08-12 尝试用vs写一个程序整合MySQL和QT 参考资料:https://blog.csdn.net/qq_35987486/article/details/8406 ...
- koa2+koa-generator+mysql快速搭建nodejs服务器
koa2+koa-generator+mysql快速搭建nodejs服务器 用koa的脚手架koa-generator可以快速生成项目骨架,可以用于发开或者测试接口 https://github.co ...
- Redis整合MySQL和MyCAT分库组件(来源是我的新书)
MyCAT是一个开源的分布式数据库组件,在项目里,一般用这个组件实现针对数据库的分库分表功能,从而提升对数据表,尤其是大数据库表的访问性能.而且在实际项目里,MyCAT分库分表组件一般会和MySQL以 ...
- 全文检索引擎Solr系列——整合MySQL、MongoDB
MySQL 拷贝mysql-connector-java-5.1.25-bin.jar到E:\solr-4.8.0\example\solr-webapp\webapp\WEB-INF\lib目录下面 ...
- c3p0整合mysql报错问题
启动报错: [com.mchange.v2.c3p0.DriverManagerDataSource] - Could not load driverClass com.mysql.cj.jdbc.D ...
- 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 ...
- Spring学习总结(18)——Spring整合Mysql数据库一主多从、多主多从配置
一.新建jdbc.properties配置文件 master.jdbc.driverClassName=com.mysql.jdbc.Driver master.jdbc.url=jdbc:mysql ...
随机推荐
- 【Unity3D】导航系统
1 导航系统简介 导航系统用于智能避障并寻找目标物体,如:王者荣耀中,当玩家跑到敌方塔的攻击范围内,敌方塔就会发射火团攻击玩家,当玩家逃跑时,火团会智能跟随玩家,其中智能跟随就使用到了导航系统. ...
- 微信小程序云开发项目-个人待办事项-03【主页】模块开发
上一篇: 微信小程序云开发项目-个人待办事项-02今日模块开发 https://blog.csdn.net/IndexMan/article/details/124497893 模块开发步骤 本篇介绍 ...
- js结合canvas画任意多边形
实现六边形 // html <canvas></canvas> // js const canvas = document.querySelector("canvas ...
- swagger 文档优化 knife4j 增强 Swagger
swagger 省去了程序员开发过程中拟写接口文档的时间,是团队开发必不可少的工具,原生的swagger 界面功能比较少,也不支持文档导出,业界也有不少针对swagger 文档界面优化的插件,良莠不齐 ...
- picgo如何设置又拍云图床
1. 打开又拍云官网.正常注册,并且实名认证. 2. 选择产品,然后选择云存储,激活后进入控制台. 3. 创建云存储服务.注意服务名称.后续会用到 4. 新建一个操作员,并且给权限全部打勾. 添加好操 ...
- Linux或者Mac解压乱码问题
1.unar : 命令行解压工具 2.安装: ubuntu等Linux安装方法:sudo apt install unar mac系统安装方法:brew install unar 现在mac电脑用 T ...
- 【Azure Cloud Service(Extended Support)】如何使用外延服务迁移应用?
问题一:迁移到云服务扩展后,之前经典版的云服务的部署槽会变成单一的部署槽,关于两个云服务扩展版之间的部署交换能否提供一个演示? 对于具有双槽的云服务(Classic),根据文档中的建议,在迁移到云服务 ...
- 【Azure 应用服务】在创建App Service时,遇见“No available instances to satisfy this request. App Service is attempting to increase capacity.”错误
问题描述 在创建新的App Service,遇见了资源不满足当前需求的提示.详细消息为: "Code": "Conflict","Message&qu ...
- Java 类的成员之四: 代码块(或初始化块)
1 package com.bytezreo.block; 2 3 /** 4 * 5 * @Description 类的成员之四: 代码块(或初始化块) 6 * @author Bytezero·z ...
- 2、zookeeper的简单命令
Zookeeper的常用命令本篇不包括权限acl相关以及集群相关,那些要另开篇章.使用的版本是Zookeeper3.4.14,不同版本会有一定的差异性. 节点的存储信息 新增命令 语法:create ...