美文网首页让前端飞Java 核心技术
深入解析Node.js使用MySQL连接池

深入解析Node.js使用MySQL连接池

作者: a333661d6d6e | 来源:发表于2018-12-24 21:12 被阅读2次

    这篇文章主要介绍了Node.js使用MySQL连接池的方法,结合具体实例形式分析了nodejs操作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"
    });//欢迎加入前端全栈开发交流圈一起吹水聊天学习交流:864305860
    

    那么,下面的代码会为你建立一个新的连接。

    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 );
      }
    });//欢迎加入前端全栈开发交流圈一起吹水聊天学习交流:864305860
    

    最后,我们可以用两种方法关闭连接。用connection.end或者connection.destroy。
    下面的表达式会确保所有队列中的查询在数据库连接关闭前都会被执行。请注意,这里有一个回调函数。

    connection.end(function(err){
    // Do something after the connection is gracefully terminated.
    });//欢迎加入前端全栈开发交流圈一起吹水聊天学习交流:864305860
    

    下面的表达式会立即关闭数据库连接。并且没有回调函数或者触发任何事件。

    connection.destroy( );
    

    Nodejs使用MysQL的连接池

    使用连接池可以帮助我们更好的管理数据库连接。数据库连接池可以限制连接的最大数量,复用已有的连接等。
    首先,我们需要创建一个连接池:

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

    其次,我们可以从创建的连接池中获取到一个我们需要的连接:

    pool.getConnection(function(err, connection){
    });//欢迎加入前端全栈开发交流圈一起吹水聊天学习交流:864305860
    

    使用回调函数的参数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();
    });//欢迎加入前端全栈开发交流圈一起吹水聊天学习交流:864305860
    

    执行多条查询语句

    为了安全起见,默认情况下是不允许执行多条查询语句的。要使用多条查询语句的功能,就需要在创建数据库连接的时候打开这一功能:

    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
    
    1. 建立一个类库,就叫mysql.js吧,然后内容如下:
    var mysql=require("mysql");
    var pool = mysql.createPool({
     host: 'localhost',
     user: 'user',
     password: 'password',
     database: 'database',
     port: port
    });//欢迎加入前端全栈开发交流圈一起吹水聊天学习交流:864305860
    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;//欢迎加入前端全栈开发交流圈一起吹水聊天学习交流:864305860
    
    1. 在js类使用如下
    var query=require("./lib/mysql.js");
    query("select 1 from 1",function(err,vals,fields){
     //do something
    });//欢迎加入前端全栈开发交流圈一起吹水聊天学习交流:864305860
    

    结语

    感谢您的观看,如有不足之处,欢迎批评指正。

    本次给大家推荐一个免费的学习群,里面概括移动应用网站开发,css,html,webpack,vue node angular以及面试资源等。
    对web开发技术感兴趣的同学,欢迎加入Q群:864305860,不管你是小白还是大牛我都欢迎,还有大牛整理的一套高效率学习路线和教程与您免费分享,同时每天更新视频资料。
    最后,祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰。

    相关文章

      网友评论

        本文标题:深入解析Node.js使用MySQL连接池

        本文链接:https://www.haomeiwen.com/subject/xjfwkqtx.html