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 相关文章推荐
来自chinaz的ajax获取评论代码
May 03 Javascript
jQuery.getScript加载同域JS的代码
Feb 13 Javascript
jquery在Chrome下获取图片的长宽问题解决
Mar 20 Javascript
15个jquery常用方法、小技巧分享
Jan 13 Javascript
JS中改变this指向的方法(call和apply、bind)
Mar 26 Javascript
一个超简单的jQuery回调函数例子(分享)
Aug 08 Javascript
AngularJs Dependency Injection(DI,依赖注入)
Sep 02 Javascript
jQuery Validate 相关参数及常用的自定义验证规则
Mar 06 Javascript
jquery获取元素到屏幕四周可视距离的方法
Sep 05 jQuery
node.js的http.createServer过程深入解析
Jun 06 Javascript
小程序识别身份证,银行卡,营业执照,驾照的实现
Nov 05 Javascript
js实现上传图片并显示图片名称
Dec 18 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
array_multisort实现PHP多维数组排序示例讲解
2011/01/04 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
2020/10/30 PHP
animate动画示例(泪奔的小孩)及stop和delay的使用
2013/05/06 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
2015/05/15 Javascript
AngularJs实现ng1.3+表单验证
2015/12/10 Javascript
基于jQuery实现点击弹出层实例代码
2016/01/01 Javascript
基于javascript实现窗口抖动效果
2016/01/03 Javascript
jQuery插件 Jqplot图表实例
2016/06/18 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
javascript使用闭包模拟对象的私有属性和方法
2016/10/05 Javascript
基于MVC方式实现三级联动(JavaScript)
2017/01/23 Javascript
浅谈vue-lazyload实现的详细过程
2017/08/22 Javascript
spirngmvc js传递复杂json参数到controller的实例
2018/03/29 Javascript
ios中视频的最后一桢问题解决
2019/05/14 Javascript
微信小程序里引入SVG矢量图标的方法
2019/09/20 Javascript
微信小程序开发数据缓存基础知识辨析及运用实例详解
2020/11/06 Javascript
从零学python系列之从文件读取和保存数据
2014/05/23 Python
Python functools模块学习总结
2015/05/09 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
2018/01/06 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
快速解决vue.js 模板和jinja 模板冲突的问题
2019/07/26 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
详解pycharm2020.1.1专业版安装指南(推荐)
2020/08/07 Python
python3 os进行嵌套操作的实例讲解
2020/11/19 Python
python pyg2plot的原理知识点总结
2021/02/28 Python
纯css3实现宠物小鸡实例代码
2018/10/08 HTML / CSS
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
毕业自我鉴定
2013/11/05 职场文书
教师党性分析材料
2014/02/04 职场文书
小学英语课后反思
2014/04/26 职场文书
2015年驾驶员工作总结
2015/04/29 职场文书
隐形的翅膀观后感
2015/06/10 职场文书
小学英语教师2015年度个人工作总结
2015/10/14 职场文书