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 相关文章推荐
flash javascript之间的通讯方法小结
Dec 20 Javascript
12个非常有创意的JavaScript小游戏
Mar 18 Javascript
JavaScript 原型学习总结
Oct 29 Javascript
jquery 无限级联菜单案例分享
Mar 26 Javascript
使用javascript过滤html的字符串(注释标记法)
Jul 08 Javascript
javascript四舍五入函数代码分享(保留后几位)
Dec 10 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
Aug 07 Javascript
jQuery取得iframe中元素的常用方法详解
Jan 14 Javascript
js控制TR的显示隐藏
Mar 04 Javascript
JavaScript 性能提升之路(推荐)
Apr 10 Javascript
JavaScript动态检测密码强度原理及实现方法详解
Jun 11 Javascript
微信小程序入门之绘制时钟
Oct 22 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
全国FM电台频率大全 - 17 湖北省
2020/03/11 无线电
php下载文件的代码示例
2012/06/29 PHP
windows下zendframework项目环境搭建(通过命令行配置)
2012/12/06 PHP
thinkphp的dump函数无输出实例代码
2016/11/15 PHP
php实现生成code128条形码的方法详解
2017/07/19 PHP
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
常见JS效果之图片减速度滚动实现代码
2011/12/08 Javascript
jquery结合CSS使用validate实现漂亮的验证
2015/01/29 Javascript
javascript实时显示当天日期的方法
2015/05/20 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
2019/04/02 Javascript
node.js基于socket.io快速实现一个实时通讯应用
2019/04/23 Javascript
VUE渲染后端返回含有script标签的html字符串示例
2019/10/28 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
浅谈python字符串方法的简单使用
2016/07/18 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
python使用正则筛选信用卡
2019/01/27 Python
详解Python网络框架Django和Scrapy安装指南
2019/04/01 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
2019/05/13 Python
python matplotlib库绘制条形图练习题
2019/08/10 Python
Python猴子补丁知识点总结
2020/01/05 Python
python pycharm最新版本激活码(永久有效)附python安装教程
2020/09/18 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解
2020/02/14 Python
python列表的逆序遍历实现
2020/04/20 Python
Python接口测试文件上传实例解析
2020/05/22 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
HTML5跳转小程序wx-open-launch-weapp的示例代码
2020/07/16 HTML / CSS
澳大利亚正品化妆品之家:Cosmetic Capital
2017/07/03 全球购物
网络教育毕业生自我鉴定
2013/10/10 职场文书
公司业务主管岗位职责
2013/12/07 职场文书
我为自己代言广告词
2014/03/18 职场文书
大学迎新晚会主持词
2014/03/24 职场文书
合作经营协议书范本
2014/09/16 职场文书
你真的了解redis为什么要提供pipeline功能
2021/06/22 Redis
MySQL优化常用的19种有效方法(推荐!)
2022/03/17 MySQL