如何使用 Node.js 和 MySQL 使用连接池示例
在某些情况下,将 Nodejs 与 MySQL 一起使用是一个不错的选择,而不是 PHP 或任何其他服务器端语言。
通过使用 Nodejs,您可以获得其异步行为的优势,这在某些情况下可能会提高性能,并且您可能不需要将现有的 MySQL 数据库迁移到其他一些 NoSQL 数据库来获得额外的性能。
如何在 Node.js 中使用 MySQL
要将 MySQL 与 Nodejs 一起使用,我们可以使用 MySQL 的 nodejs 驱动程序。对于我们的示例,我们将使用“node-mysql”驱动程序连接到数据库,如下所示:
首先,我们需要在节点包管理器(npsm)的帮助下安装 mysql 驱动程序。在节点 shell 或终端上使用以下命令。
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
}
});
- 点赞
- 收藏
- 关注作者
评论(0)