mysql.createPool(db),node.js实战:手把手教你使用mysql

简介

MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

mysql实战

1、安装

$ npm install mysql

2、连接

2.1、创建db配置文件和工具文件

//db_config.js db配置文件

module.exports = {

host: 'host',

user: 'mysql用户名',

password: 'mysql密码',

database: '连接的数据库名字',

port:port,

dateStrings:true

}

//tools.js 工具文件 格式化结果的文件

var tools = {};

module.exports = tools;

tools.formatResult = function(err, result){

if (err){

return {

"status": false,

"data" : err

}

}else {

return {

"status": true,

"data" : result

}

}

}

2.2、3种数据库连接方式

方式一: Establishing connections

//mysql_connection.js

var mysql = require('mysql');

var db_config = require('./db_config');

var tools = require('./tools');

var mysql_connection = {};

module.exports = mysql_connection;

var connection = mysql.createConnection(db_config);

mysql_connection.query = function(sql){

return new Promise(function (resolve) {

connection.query(sql, function (error, results, fields) {

//当查询完毕,结束连接,这种方式比较推荐,会有回调函数

connection.end(function(err) {

// The connection is terminated now

if(err){

console.log(err);

}else {

console.log('end');

}

});

//当查询完毕,结束连接,这种方式会立即断开连接,并不会有回调函数

//connection.destroy();

//打印数据

console.log(results);

//console.log(fields);

resolve(tools.formatResult(error, results));

});

});

}

//mysql_demo.js 使用方法

//每次都创建一个连接,执行完就断开连接

var mysql_connection = require('./mysql_connection');

var getInfo1 = async function(){

var sql = 'select * from wx_users_relation';

var result = await mysql_connection.query(sql);

console.log(result.data[0].open_id);

}

//当connection.end来关闭连接时,可以多次调用异步方法来进行多次数据库操作

//原因: 因为异步运行中,connection在完成数据库操作一次后,用connection.end来关闭连接时,不会关闭连接,而是返回错误

getInfo1();

getInfo1();

getInfo1();

//这种方式不能进行多次查询 只能查询一次

//原因: 因为同步运行中,connection在完成数据库操作一次后就断开连接了

//var run1 = async function(){

// await getInfo1();

// await getInfo1();

// await getInfo1();

//}

//

//run1();

mysql.createPool(db),node.js实战:手把手教你使用mysql_第1张图片

结果

方式二: Pooling connections

//mysql_pool.js

var mysql = require('mysql');

var db_config = require('./db_config');

var tools = require('./tools');

var mysql_pool = {};

module.exports = mysql_pool;

var pool = mysql.createPool(db_config);

//断开连接

function _release(connection) {

try {

connection.release();

} catch (err) {

console.log('DB-关闭数据库连接异常!- 2: ' + err);

}

}

//执行sql语句

mysql_pool.query = function(sql, values) {

return new Promise(function (resolve) {

pool.getConnection(function(err, connection){

if (err) {

throw 'DB-获取数据库连接异常:'+err;

} else {

connection.query(sql, values, function(err, rows) {

_release(connection);

resolve(tools.formatResult(err, rows));

});

}

});

});

}

//关闭连接池

mysql_pool.end = function(){

pool.end(function (err) {

if(err){

console.log('连接池关闭错误: ' + err);

}else {

console.log('连接池关闭成功');

}

// all connections in the pool have ended

});

}

//mysql_demo.js

// 提供连接池来支持创建和管理一个个连接,适合并发高的连接方式

var mysql_pool = require('./mysql_pool');

var getInfo2 = async function (){

var sql = 'select * from wx_users_relation';

var result = await mysql_pool.query(sql, '');

console.log(result.data[0].open_id);

}

//必须同步执行代码,否则会提前结束线程池

var run2 = async function(){

await getInfo2();

await getInfo2();

await getInfo2();

//当一个个连接结束湿,结束线程池

mysql_pool.end();

}

run2();

1b2c224d369b40806293116d5f05b59f.png

运行结果

方式三: PoolCluster

//mysql_poolCluster.js

var mysql = require('mysql');

var db_config = require('./db_config');

var tools = require('./tools');

var mysql_poolCluster = {};

module.exports = mysql_poolCluster;

//PoolCluster 提供多个主机连接

var poolCluster = mysql.createPoolCluster();

poolCluster.add('MASTER', db_config); // add a named configuration

//断开连接

function _release(connection) {

try {

connection.release();

} catch (err) {

console.log('DB-关闭数据库连接异常!- 2: ' + err);

}

}

// Target Group : MASTER, Selector : round-robin

//执行sql语句

mysql_poolCluster.query = function(sql, values) {

return new Promise(function (resolve) {

poolCluster.getConnection('MASTER', function (err, connection) {

if (err) {

throw 'DB-获取数据库连接异常:'+err;

} else {

connection.query(sql, values, function(err, rows) {

_release(connection);

resolve(tools.formatResult(err, rows));

});

}

});

});

}

//关闭poolCluster

mysql_poolCluster.end = function(){

// close all connections

poolCluster.end(function (err) {

if(err){

console.log('poolCluster 关闭错误: ' + err);

}else {

// all connections in the pool cluster have ended

console.log('poolCluster 关闭成功');

}

});

}

//mysql_demo.js

// poolCluster 提供多个主机连接

var mysql_poolCluster = require('./mysql_poolCluster');

var getInfo3 = async function (){

var sql = 'select * from wx_users_relation';

var result = await mysql_poolCluster.query(sql, '');

console.log(result.data[0].open_id);

}

//必须同步执行代码,否则会提前结束线程池

var run3 = async function(){

await getInfo3();

await getInfo3();

await getInfo3();

//当一个个连接结束湿,结束线程池

mysql_poolCluster.end();

}

run3();

82c69592174c2e25e595802b4f0eb004.png

运行结果

最后

出文不出码,只能码代码。

源码传送门

最后,如果觉得我的文章对你有些许的帮助,请帮忙点个赞。

你可能感兴趣的:(mysql.createPool(db),node.js实战:手把手教你使用mysql)