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 ...
随机推荐
- NC15128 老子的全排列呢
题目链接 题目 题目描述 老李见和尚赢了自己的酒,但是自己还舍不得,所以就耍起了赖皮,对和尚说,光武不行,再来点文的,你给我说出来1-8的全排序,我就让你喝,这次绝不耍你,你能帮帮和尚么? 输入描述 ...
- Linux进程的创建与销毁
Linux操作系统是一种多任务.多用户的操作系统,这意味着它可以同时运行多个进程,每个进程都可以执行不同的任务. 在本文中,我们将介绍如何在Linux系统中创建和销毁进程. 进程的创建 在Linux系 ...
- Java异常处理的20个最佳实践:告别系统崩溃
引言 在Java编程中,异常处理是一个至关重要的环节,它不仅涉及到程序的稳定性和安全性,还关系到用户体验和系统资源的合理利用.合理的异常处理能够使得程序在面对不可预知错误时,能够优雅地恢复或者给出明确 ...
- Java 中拼接 String 的 N 种方式
文章持续更新,可以关注公众号程序猿阿朗或访问未读代码博客. 本文 Github.com/niumoo/JavaNotes 已经收录,欢迎Star. 1. 前言 Java 提供了拼接 String 字符 ...
- win32 - 按文件的创建日期排序
因项目中使用文件的创建日期来命名文件,所以不用额外查找文件的创建日期再进行排序,记录一下 bool AscendingSortByCreationTime(const std::wstring& ...
- win32-如何识别哪个静态控件被点击
创建多个具体SS_NOTIFY样式的static controls 根据文档显示,当用户单击具有SS_NOTIFY样式的静态控件时,将发送STN_CLICKED通知代码.控件的父窗口通过WM_COMM ...
- 链表--insert
分别是使用了二级指针和一级指针的两种方法,最后会按插入的顺序依次打印1,2,3,4 主要区别在于,使用二级指针,可以在main函数里直接用一个空的Node指针,而一级指针是在main函数里面先添加了一 ...
- 需要入门IT行业并且想做java后台小伙伴-简单谈谈后台开发Spring与SpringBoot
1.Spring能做什么 1.1.Spring的能力 1.2.Spring的生态 https://spring.io/projects/spring-boot 覆盖了: web开发 数据访问 安全控制 ...
- 【Azure Redis 缓存】Azure Redis 功能性讨论三: 调优参数配置
问题描述 在使用Azure Redis的服务中,遇见了以下系列问题需要澄清: 在开源Redis 6.0 中,多线程默认禁用,只使用主线程.如需开启需要修改redis.config配置文件.Redis的 ...
- Volatile关键字原理
转载请标明:https://www.cnblogs.com/tangZH/p/15113505.html 一.如果一个变量被volatile关键字修饰,那么所有线程都是可见的.所谓可见就是,当一条线程 ...