≡菜单

如何通过连接池示例在MySQL中使用Node.js

在某些情况下’最好将Nodejs与MySQL一起使用,而不是PHP或任何其他服务器端语言。

通过使用Node.js,您可以利用其异步行为的优势,这种异步行为在某些情况下可以提高性能,并且可能不需要将现有的MySQL数据库迁移到其他NoSQL数据库即可获得更高的性能。

如何在Node.js中使用MySQL

为了将MySQL与Nodejs一起使用,我们可以使用针对MySQL的nodejs驱动程序。对于我们的例子,我们’ll use the “node-mysql”驱动程序连接数据库,如下所示:

首先,我们需要在节点包管理器(npsm)的帮助下安装mysql驱动程序。在节点外壳或终端上使用以下命令。

npm install mysql

现在,为了在JavaScript应用程序文件中使用mysql客户端,请添加以下代码,该代码基本上会将模块导入到脚本中。

  var mysql =  require('mysql');

接下来,我们可以使用该模块创建MySQL连接,我们必须在其中指定mysql服务器主机名,用户名和密码。还有很多 选项 我们可以在创建数据库,时区,socketPath,localAddress和stringifyObjects等连接时进行设置。

  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( );

在MySQL Node.js中实现连接池

通过连接池,我们可以通过限制多个连接并以不同的时间表重用它们来对多个连接进行有效的管理。

首先,我们需要创建一个连接池。可以按照以下脚本进行操作。池在连接时接受所有选项。

  var mysql =  require('mysql');                  
  var pool =  mysql.createPool({
	host : “hostName”,
	user : “username”,
	password: “password”
  });	

接下来,可以在需要时从创建的池中获得连接,如下所示:

  pool.getConnection(function(err, connection){
  });

使用getConnection的回调函数中的connection参数来查询数据库,如下所示。最后,要释放连接,请使用“ connection.release();”,如以下代码片段的最后一行所述。

pool.getConnection(function(err, connection){
  connection.query( “select * from table1”,  function(err, rows){
  	if(err)	{
  		throw err;
  	}else{
  		console.log( rows );
  	}
  });
  
  connection.release();
});

在MySQL Node.js中执行多个语句查询

为了安全起见,默认情况下,禁用执行多个语句查询。要使用多个语句查询,您应该在创建连接时首先启用它,如下所示。

var connection =  mysql.createConnection( { multipleStatements: true } );

启用后,您可以执行多个语句查询,如下所示在connection.query中。

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
  }
});

如果您喜欢这篇文章,您可能还会喜欢..

  1. 50个3d捕鱼达人 Sysadmin教程
  2. 50个最常用的3d捕鱼达人命令(包括示例)
  3. 排名前25位的最佳3d捕鱼达人性能监视和调试工具
  4. 妈妈,我找到了! – 15个实用的3d捕鱼达人 Find命令示例
  5. 3d捕鱼达人 101 Hacks第二版电子书 3d捕鱼达人 101黑客手册

Bash 101 Hacks书 Sed和Awk 101黑客手册 Nagios Core 3书 Vim 101黑客手册

{ 10 评论… 加一 }

  • 巴吉亚杰 2014年1月30日,上午8:29

    不错的文章,有些异常。
    基本上,Thegeekstuff在开始之前会解释所有基本内容。
    您应该已经介绍了node.js的一些基础知识(Java脚本– i guess),
    js的格式,
    关于js语法的一些说明。
    但是绝对不错的文章。

  • 冯斯基皮 2014年1月30日,下午1:27

    相当轻率–您跳过了最重要的部分– which is security.

    将数据库密码设置为明文而不用谈论如何保护该文件是很粗心的。

    世界不’需要另一个系统加入受感染系统的僵尸网络大军。

  • 克里斯蒂安·里斯(Kristian Reese) 2014年1月30日,晚上11:44

    给那个家伙一些荣誉。目的是说明在某些用例中,如何使用Node.js比php更合适。另外,他’还显示了使用php的替代方法。安全性毋庸置疑,显然超出了本文的目的和作者的意图。

  • 维克多·瓦德(Viktor Vad) 2014年1月31日,上午5:19

    基本上,他不是来这里教您这篇文章的基础知识的,因为简短的文章是不够的,这不是他的意图。但是他在这里向您展示了如何使用连接池。其他所有内容都是特别的,无论如何对于初学者来说都不是。
    不错的文章,感谢您的努力!

  • 塔拉克 2014年4月3日,上午5:14

    嗨,
    我收到此错误“TypeError:对象#没有方法‘release'”
    使用语句connection.release()但不使用语句connection.end()执行连接池示例时为什么?请帮我。

  • 普拉布 2014年4月5日,下午1:20

    你好

    我需要使用与node.js express ..的mysql连接。
    在这一本书中,我想在浏览器中而不是在console(console.log(rows))中执行数据库表行。
    提前致谢。

  • 易卜拉欣·阿帕奇 2014年5月21日,上午1:40

    相当不错的教程!我非常喜欢您如何强调基本内容-

  • 迈克尔·格兰特 2014年9月17日,上午8:56

    在连接池示例中,您在connection.query()之后立即调用connection.release()。应该’对connection.release()的调用是在connection.query()内部的(在结束对查询结果的了解之后,但是在此函数内部)?

    除非我误会了’这样做,您可能最终在调用匿名查询函数之前就放弃了连接。

    或者换一种说法,如果将connection.release()保留在其上方,则需要提供一些保护条件以了解您是否’已经完成所有查询。我对么?还是connection.release()足够聪明才能做到这一点?

    顺便说一下,文档似乎与我的想法一致 //github.com/felixge/node-mysql

  • 阿舒托什 2015年6月8日,上午1:15

    漂亮的内容。喜欢它,谢谢

  • Genoki 2015年6月28日,下午6:11

    mysql db用户和密码值/配置文件在哪里保存,因此站点访问者看不到它们?

发表评论