node js 从零学习(7)mysql 直连和数据池

本文详细介绍了如何在Node.js环境中使用mysql中间件连接并操作MySQL数据库,包括直连方式和连接池的概念及实现,帮助开发者优化数据库访问性能。

mysql

前几天看了19年全球数据库流行度的榜单
数据库流行度排行
mysql数据库因为免费的原因还是有很多小公司和个人使用,相信大部分前端朋友用php和mysql早已经滚瓜乱熟,这里我就不班门弄斧了,这次和大家分享下如何在nodejs下连接mysql
这里我们要介绍下同名中间件 mysql,
必要前提已安装过mysql数据库 ,可以去官网下载社区版,一般前端老铁用wamp也可以。
首先我们先安装 mysql 中间件 npm i mysql -S
话不多说直接看代码

 var mysql = require('mysql');
// 连接数据库
var connection = mysql.createConnection({//配置信息 账号密码 数据库名称 端口号
	host: 'localhost',
	user: 'root',
	password: '',
	database: 'test',
	port: '3306'
});
// 创建一个连接
connection.connect(function(err){
	if(err){
		console.log('[log]-:' + err);
		return;
	}else{
		console.log('[connection connect] success!');
	}
});
// 执行插入
//var userInsertSql = 'insert into user (username,password) values ("vane","123456")';
//推荐使用利用占位符模式进行操作,直接解决sql注入的安全性问题
var userInsertSql = 'insert into user (username,password) values (?,?)';//mysql语句 ? 为占位符
var params = ['chinavane','654321'];//对应上面占位符
connection.query(userInsertSql, params, function(err,results){
	if(err){
		console.log('insert err:' + err);
		return;
	}
	console.log('insert success');
});
// 查询数据
// var userSelectSql = 'select * from user';//mysql 语句
// connection.query(userSelectSql,function(err,results){
// 	if(err){
// 		console.log('select err:' + err);
// 		return;
// 	}
// 	for (var i = 0; i < results.length; i++) {
// 		console.log(results[i].username);
// 	};
// });
// 关闭一个连接
connection.end(function(err){
	if(err){
		console.log(err.toString());
		return;
	}else{
		console.log('[connection end] success!');
	}
});

不难发现其实还是mysql语句 剩下的中间件已经都帮我们搞定了
但这样连接的方式是直连,我们自己调试的时候可以使用,但如果多人直连,性能总有枯竭的时候。
因而诞生了一个新的概念,连接池
原理:
首先创建多个连接,放到连接池(数组)中存起来;
当需要访问数据的时候,不用再创建连接,直接从连接池取出连接使用,进行数据库操作,操作结束释放掉资源放回连接池中;
连接池会自动管理池中的连接(当访问量少的时候,会自动减少一些连接,当访问量大的时候会自动增加一些连接);
这样达到资源最优的方式。
话不多说我们上代码

//--------------------自定义连接池模块 文件名datapool
var mysql=require("mysql");
var pool = mysql.createPool({//同样的配置信息
	host: 'localhost',
	user: 'root',
	password: '',
	database: 'test',
	port: '3306'
});

var query=function(sql,callback){
    pool.getConnection(function(err,conn){
        if(err){
            callback(err,null,null);
        }else{
            conn.query(sql,function(qerr,vals,fields){
                //释放连接
                conn.release();
                //事件驱动回调
                callback(qerr,vals,fields);
            });
        }
    });
};
module.exports=query;//暴露接口
//使用自定义模块建立连接
var query=require('./datapool');
query("select * from users",function(err,vals,fields){
    if(vals){
        var valsLen = vals.length;
        for (var i = 0; i < valsLen; i++) {//遍历
    		console.log(vals[i].username);
    	};
    }
});

我们不难发现,如果多次连接,这种模式既能优化性能,又能减少代码 ,非常好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值