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浮动DIV提示信息并自动隐藏的代码
Aug 29 Javascript
javascript动态加载二
Aug 22 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
Dec 02 Javascript
谈谈JavaScript异步函数发展历程
Sep 29 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
Jan 27 Javascript
详解JS对象封装的常用方式
Dec 30 Javascript
Angular下H5上传图片的方法(可多张上传)
Jan 09 Javascript
最实用的JS数组函数整理
Dec 05 Javascript
深入浅析Vue中的Prop
Jun 10 Javascript
vue项目实现github在线预览功能
Jun 20 Javascript
Vue+axios实现统一接口管理的方法
Jul 23 Javascript
使用jQuery实现掷骰子游戏
Oct 24 jQuery
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
从C/C++迁移到PHP——判断字符类型的函数
2006/10/09 PHP
PHP版 汉字转码的实现详解
2013/06/09 PHP
php邮箱地址正则表达式验证
2015/11/13 PHP
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
thinkphp多层MVC用法分析
2015/12/30 PHP
js字符编码函数区别分析
2008/06/05 Javascript
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
2010/09/12 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
2013/04/26 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
jquery、js操作checkbox全选反选
2014/03/12 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
2014/09/17 Javascript
JS实现微信里判断页面是否被分享成功的方法
2017/06/06 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
解决vue组件中click事件失效的问题
2019/11/09 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
javascript实现简单留言板案例
2021/02/09 Javascript
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
Python实现扩展内置类型的方法分析
2017/10/16 Python
快速了解Python中的装饰器
2018/01/11 Python
python2.7实现FTP文件下载功能
2018/04/15 Python
Python中实现变量赋值传递时的引用和拷贝方法
2018/04/29 Python
python 实现在Excel末尾增加新行
2018/05/02 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
2018/09/14 Python
Python字符串的全排列算法实例详解
2019/01/07 Python
Pandas之DataFrame对象的列和索引之间的转化
2019/06/25 Python
python实现集中式的病毒扫描功能详解
2019/07/09 Python
python 提取文件指定列的方法示例
2019/08/07 Python
Python 实现Numpy中找出array中最大值所对应的行和列
2019/11/26 Python
HTML5表单验证特性(知识点小结)
2020/03/10 HTML / CSS
最新的小工具和卓越的产品设计:Oh That Tech!
2019/08/07 全球购物
结婚典礼证婚词
2014/01/11 职场文书
材料工程专业毕业生求职信
2014/03/04 职场文书
2014年国庆节寄语
2014/09/19 职场文书
2014年店长工作总结
2014/11/17 职场文书
培训督导岗位职责
2015/04/10 职场文书