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 相关文章推荐
各浏览器对click方法的支持差异小结
Jul 31 Javascript
基于jQuery实现返回顶部实例代码
Jan 01 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
Mar 12 Javascript
url中的特殊符号有什么含义(推荐)
Jun 17 Javascript
HTML5 实现的一个俄罗斯方块实例代码
Sep 19 Javascript
Select2.js下拉框使用小结
Oct 24 Javascript
javascript动画系列之模拟滚动条
Dec 13 Javascript
ajax实现动态下拉框示例
Jan 10 Javascript
微信小程序 动画的简单实例
Oct 12 Javascript
bootstrap treeview 树形菜单带复选框及级联选择功能
Jun 08 Javascript
详解如何提升JSON.stringify()的性能
Jun 12 Javascript
node事件循环和process模块实例分析
Feb 14 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轻松实现中英文混排字符串截取
2014/05/28 PHP
php常用字符串处理函数实例分析
2014/11/22 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
Codeigniter的dom类用法实例
2015/06/26 PHP
浅谈PHP中output_buffering
2015/07/13 PHP
php显示页码分页类的封装
2017/06/08 PHP
php判断/计算闰年的方法小结【三种方法】
2019/07/06 PHP
tp5 sum某个字段相加得到总数的例子
2019/10/18 PHP
IE 缓存策略的BUG的解决方法
2007/07/21 Javascript
javascript 一个函数对同一元素的多个事件响应
2009/07/25 Javascript
推荐10个2014年最佳的jQuery视频插件
2014/11/12 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
javascript实现简单的二级联动
2015/03/19 Javascript
jQuery实现的分子运动小球碰撞效果
2016/01/27 Javascript
Bootstrap媒体对象的实现
2016/05/01 Javascript
jQuery轻松实现表格的隔行变色和点击行变色的实例代码
2016/05/09 Javascript
使用FileReader API创建Vue文件阅读器组件
2018/04/03 Javascript
微信小程序实现订单倒计时
2020/11/01 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
2019/07/29 Javascript
基于form-data请求格式详解
2019/10/29 Javascript
如何实现echarts markline标签名显示自己想要的
2020/07/20 Javascript
Element InputNumber计数器的使用方法
2020/07/27 Javascript
详解vue 中 scoped 样式作用域的规则
2020/09/14 Javascript
分分钟入门python语言
2018/03/20 Python
Python闭包函数定义与用法分析
2018/07/20 Python
pytorch 预训练层的使用方法
2019/08/20 Python
python脚本调用iftop 统计业务应用流量的思路详解
2019/10/11 Python
浅析python redis的连接及相关操作
2019/11/07 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
美国最大网上鞋店:Zappos
2016/07/25 全球购物
德国网上花店:Valentins
2018/08/15 全球购物
供电工程专业求职信
2014/08/09 职场文书
学校副校长四风对照检查材料整改措施
2014/09/25 职场文书
2015年小学总务工作总结
2015/07/21 职场文书
oracle通过存储过程上传list保存功能
2021/05/12 Oracle