Node.js使用MySQL连接池的方法实例


Posted in Javascript onFebruary 11, 2018

本文实例讲述了Node.js使用MySQL连接池的方法。分享给大家供大家参考,具体如下:

Nodejs如何使用MySQL

Nodejs要连接MySQL,可以使用Nodejs的MysQL驱动来实现。比如,我们这里使用"node-mysql"连接数据库。我们使用下面的方式来连接数据库:

首先,我们需要使用nodejs的包管理工具(npm)安装mysql的驱动。命令行如下:

npm install musql

现在,要在js文件中使用mysql,添加下面的代码到你的文件中:

var mysql = require('mysql');

接下来,我们就可以使用这个模块来连接MySQL数据库。当然要连接数据库需要指定MySQL Server的host name,用户名和密码等。还有其他的很多选项可以设置,比如数据库的时区、socketPath、和本地地址等。

var connection = mysql.createConnection({
  host : "hostName",
  user : "username",
  password: "password"
});

那么,下面的代码会为你建立一个新的连接。

connection.connect();

使用这个连接对象,我们可以像下面一样查询数据库。我们可以使用connection.escape()方法防止sql注入。

connection.query("use database1");
 var strQuery = "select * from table1";
 connection.query( strQuery, function(err, rows){
  if(err) {
   throw err;
  }else{
   console.log( rows );
  }
});

最后,我们可以用两种方法关闭连接。用connection.end或者connection.destroy

下面的表达式会确保所有队列中的查询在数据库连接关闭前都会被执行。请注意,这里有一个回调函数。

connection.end(function(err){
// Do something after the connection is gracefully terminated.
});

下面的表达式会立即关闭数据库连接。并且没有回调函数或者触发任何事件。

connection.destroy( );

Nodejs使用MysQL的连接池

使用连接池可以帮助我们更好的管理数据库连接。数据库连接池可以限制连接的最大数量,复用已有的连接等。

首先,我们需要创建一个连接池:

var mysql = require('mysql');
var pool = mysql.createPool({
 host : "hostName",
 user : "username",
 password: "password"
});

其次,我们可以从创建的连接池中获取到一个我们需要的连接:

pool.getConnection(function(err, connection){
});

使用回调函数的参数connection来查询数据库。最后使用connection.realease()方法释放数据库连接。

pool.getConnection(function(err, connection){
 connection.query( "select * from table1", function(err, rows){
  if(err) {
   throw err;
  }else{
   console.log( rows );
  }
 });
 connection.release();
});

执行多条查询语句

为了安全起见,默认情况下是不允许执行多条查询语句的。要使用多条查询语句的功能,就需要在创建数据库连接的时候打开这一功能:

var connection = mysql.createConnection( { multipleStatements: true } );

这一功能打开以后,你就可以像下面的例子一样同时使用多条查询语句:

connection.query('select column1; select column2; select column3;', function(err, result){
 if(err){
  throw err;
 }else{
  console.log(result[0]);  // Column1 as a result
  console.log(result[1]);  // Column2 as a result
  console.log(result[2]);  // Column3 as a result
 }
});

node.js中mysql连接池的使用

如果不想程序在查询数据时卡死或等待过长时间,一般不推荐在node中开启一个连接后全部查询都用这个链接并且不关闭,因为,你试了就知道为什么了

Node.js mysql连接池模块

1. 安装node的mysql模块

npm -install -g node-mysql

2. 建立一个类库,就叫mysql.js吧,然后内容如下:

var mysql=require("mysql");
var pool = mysql.createPool({
 host: 'localhost',
 user: 'user',
 password: 'password',
 database: 'database',
 port: port
});
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;

3. 在js类使用如下

var query=require("./lib/mysql.js");
query("select 1 from 1",function(err,vals,fields){
 //do something
});

希望本文所述对大家nodejs程序设计有所帮助。

Javascript 相关文章推荐
基于Jquery的简单图片切换效果
Jan 06 Javascript
新鲜出炉的js tips提示效果
Apr 03 Javascript
JS打开图片另存为对话框实现代码
Dec 26 Javascript
JavaScript动态操作表格实例(添加,删除行,列及单元格)
Nov 25 Javascript
jquery中get和post的简单实例
Feb 04 Javascript
js中使用replace方法完成某个字符的转换
Aug 20 Javascript
jQuery实现带滑动条的菜单效果代码
Aug 26 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
Nov 29 Javascript
javascript 注释代码的几种方法总结
Jan 04 Javascript
微信小程序之圆形进度条实现思路
Feb 22 Javascript
angularJS1 url中携带参数的获取方法
Oct 09 Javascript
js实现移动端图片滑块验证功能
Sep 29 Javascript
vue中引用阿里字体图标的方法
Feb 10 #Javascript
Express进阶之log4js实用入门指南
Feb 10 #Javascript
Vue完整项目构建(进阶篇)
Feb 10 #Javascript
JS简单获得节点元素的方法示例
Feb 10 #Javascript
JS简单添加元素新节点的方法示例
Feb 10 #Javascript
vue.js系列中的vue-fontawesome使用
Feb 10 #Javascript
集成vue到jquery/bootstrap项目的方法
Feb 10 #jQuery
You might like
解析php下载远程图片函数 可伪造来路
2013/06/25 PHP
php实现根据IP地址获取其所在省市的方法
2015/04/30 PHP
PHP实现批量修改文件名的方法示例
2019/09/18 PHP
电子商务网站上的常用的js放大镜效果
2011/12/08 Javascript
详谈JavaScript内存泄漏
2014/11/14 Javascript
JavaScript实现带标题的图片轮播特效
2015/05/20 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
jquery实现百叶窗效果
2017/01/12 Javascript
AngularJS自定义指令实现面包屑功能完整实例
2017/05/17 Javascript
详解Node.js开发中的express-session
2017/05/19 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
Element-ui tree组件自定义节点使用方法代码详解
2018/09/17 Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
2019/06/12 jQuery
vue的注意规范之v-if 与 v-for 一起使用教程
2019/08/04 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
Pandas统计重复的列里面的值方法
2019/01/30 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
2019/06/17 Python
python实现复制大量文件功能
2019/08/31 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
Python代码一键转Jar包及Java调用Python新姿势
2020/03/10 Python
在终端启动Python时报错的解决方案
2020/11/20 Python
Django-celery-beat动态添加周期性任务实现过程解析
2020/11/26 Python
Python爬虫之Selenium实现键盘事件
2020/12/04 Python
June Jacobs尊积帕官网:知名的spa水疗护肤品牌
2019/03/21 全球购物
中职生自我鉴定范文
2013/10/03 职场文书
个人函授自我鉴定
2014/03/25 职场文书
ktv筹备计划书
2014/05/03 职场文书
渠道运营商合作协议书范本
2014/10/06 职场文书
精神病医院见习报告
2014/11/03 职场文书
写给媳妇的检讨书
2015/05/06 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书
2016年小学教师政治学习心得体会
2016/01/23 职场文书
九年级数学教学反思
2016/02/17 职场文书
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python
「玫瑰之王的葬礼」舞台剧主视觉图公开
2022/03/21 日漫
微信小程序APP的生命周期及页面的生命周期
2022/04/19 Javascript