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 相关文章推荐
JSQL 基于客户端的成绩统计实现方法
May 05 Javascript
js setTimeout 参数传递使用介绍
Aug 13 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
Apr 07 Javascript
在JavaScript中操作数组之map()方法的使用
Jun 09 Javascript
JavaScript之cookie技术详解
Nov 18 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
Jul 11 Javascript
Vue全局loading及错误提示的思路与实现
Aug 09 Javascript
vue.js中ref和$refs的使用及示例讲解
Aug 14 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
Aug 28 Javascript
jQuery实现飞机大战小游戏
Jul 05 jQuery
如何用threejs实现实时多边形折射
May 07 Javascript
vue动态绑定style样式
Apr 20 Vue.js
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
如何选购合适的收音机
2021/03/01 无线电
最令PHP初学者头痛的十四个问题
2006/07/12 PHP
PHP写入WRITE编码为UTF8的文件的实现代码
2008/07/07 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
Nginx环境下PHP flush失效的解决方法
2016/10/19 PHP
PHP实现负载均衡下的session共用功能
2018/04/17 PHP
jquery.ui.draggable中文文档
2009/11/24 Javascript
jquery中使用ajax获取远程页面信息
2011/11/13 Javascript
jqgrid 编辑添加功能详细解析
2013/11/08 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
2016/01/07 Javascript
JavaScript  cookie 跨域访问之广告推广
2016/04/20 Javascript
node puppeteer(headless chrome)实现网站登录
2018/05/09 Javascript
vue.js实现标签页切换效果
2018/06/07 Javascript
微信小程序报错: thirdScriptError的错误问题
2020/06/19 Javascript
Python中Collections模块的Counter容器类使用教程
2016/05/31 Python
使用python3.5仿微软记事本notepad
2016/06/15 Python
python删除某个字符
2018/03/19 Python
python实现自动登录后台管理系统
2018/10/18 Python
Python实现搜索算法的实例代码
2020/01/02 Python
PyCharm+PyQt5+QtDesigner配置详解
2020/08/12 Python
Python爬虫之App爬虫视频下载的实现
2020/12/08 Python
HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)
2017/01/05 HTML / CSS
阿拉伯书店:Jamalon
2019/07/24 全球购物
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
说出一些常用的类,包,接口
2014/09/22 面试题
在校大学生个人的自我评价
2014/02/13 职场文书
授权委托书范本
2014/04/03 职场文书
无锡灵山大佛导游词
2015/02/09 职场文书
英语教师个人工作总结
2015/02/09 职场文书
会计稽核岗位职责
2015/04/13 职场文书
党员带头倡议书
2015/04/29 职场文书
茶花女读书笔记
2015/06/29 职场文书
Python-typing: 类型标注与支持 Any类型详解
2021/05/10 Python
解决pytorch 损失函数中输入输出不匹配的问题
2021/06/05 Python