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 相关文章推荐
javascript读取xml
Nov 04 Javascript
Ucren Virtual Desktop V2.0
Nov 07 Javascript
验证用户是否修改过页面的数据的实现方法
Sep 26 Javascript
Javascript表格翻页效果实现思路及代码
Aug 23 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
Jan 13 Javascript
JavaScript删除指定子元素代码实例
Jan 13 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
Jul 01 Javascript
AngularJS 模块化详解及实例代码
Sep 14 Javascript
node.js学习之事件模块Events的使用示例
Sep 28 Javascript
vue interceptor 使用教程实例详解
Sep 13 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
Jun 13 Javascript
浅析 Vue 3.0 的组装式 API(一)
Aug 31 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 pack与unpack 摸板字符字符含义
2009/10/29 PHP
php二维数组排序详解
2013/11/06 PHP
php权重计算方法代码分享
2014/01/09 PHP
PHP实现将textarea的值根据回车换行拆分至数组
2015/06/10 PHP
PHP获取访问页面HTTP状态码的实现代码
2016/11/03 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
2010/04/27 Javascript
jquery下checked取值问题的解决方法
2012/08/09 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
JS实现图片的不间断连续滚动的简单实例
2016/06/03 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
JS 仿支付宝input文本输入框放大组件的实例
2017/11/14 Javascript
微信小程序中如何计算距离某个节日还有多少天
2019/07/15 Javascript
js 函数性能比较方法
2020/08/24 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
Python中使用SAX解析xml实例
2014/11/21 Python
Python内置函数之filter map reduce介绍
2014/11/30 Python
在Mac OS上搭建Python的开发环境
2015/12/24 Python
对numpy中轴与维度的理解
2018/04/18 Python
Django 多对多字段的更新和插入数据实例
2020/03/31 Python
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
SK-II神仙水美国官网:SK-II美国
2020/02/25 全球购物
网络编辑岗位职责范本
2014/02/10 职场文书
婚礼答谢宴主持词
2014/03/14 职场文书
环保建议书300字
2014/05/14 职场文书
公民授权委托书
2014/10/15 职场文书
起诉书格式范文
2015/05/20 职场文书
2015迎新晚会开场白
2015/07/17 职场文书
婚礼父母致辞
2015/07/28 职场文书
MongoDB balancer的使用详解
2021/04/30 MongoDB
使用CSS实现百叶窗效果示例代码
2023/05/07 HTML / CSS