node.js操做MySQL数据库

MySQL数据库做为最流行的开源数据库。基本上是每一个web开发者必需要掌握的数据库程序之一了。node


 

基本使用

node.js上,最受欢迎的mysql包就是mysql模块。mysql

npm install mysql

而后在js脚本里面直接引用进来web

var mysql      = require('mysql');

配置mysql的数据库链接。sql

var connection = mysql.createConnection({
  host     : 'ip',
  user     : '用户名',
  password : '密码',
  database : 'dbname'
});
connection.connect();

这样就拿到了一个链接。数据库

而后就能够愉快的进行各类curd操做了。npm

node.js对数据库的curd都在query这个方法里面。这点和ado.net有很大的区别。服务器

你的全部的操做,都从query的回调函数里面得到结果多线程

connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
  if (error) throw error;
  console.log('The solution is: ', results[0].solution);
});

 

链接池操做

在单机软件中,咱们之间使用简单得到一个链接,而后就好了。curl

可是在面向互联网的web服务里面,频繁的建立和关闭链接,是很消耗服务器性能的。异步

因而咱们的前辈们发明了各类池子。好比多线程操做中的线程池,游戏开发中的对象池,固然还包括数据库操做的链接池。

建立链接池:

var mysql = require('mysql');
var pool  = mysql.createPool({
  connectionLimit : 链接池数量,
  host            : 'ip地址',
  user            : '帐号',
  password        : '密码',
  database        : '数据库名称'
});

而后就是和上文同样的curd操做

//从链接池中获取一个链接
pool.getConnection(function(errconnection{
  if (errthrow err// not connected!
 
  // 使用这个链接curd
  connection.query('SELECT something FROM sometable'function (errorresultsfields{
    // 使用完以后,记得把这个链接放到链接池里面去
    connection.release();
 
    // Handle error after the release.
    if (errorthrow error;
 
  });
});

若是你的程序要退出,请把调用链接池的end()方法。否则程序会卡在后台,一直退出失败。

封装成Promise

在ES6中,能够直接用和C#的await同样的语法去调用js的异步函数。

可是要求这个函数必须是async声明和返回值是Promise对象。

query = function (sql, arr, callback) {
    console.log('获取一个链接');
    return new Promise(function (resolve, reject) {
        pool.getConnection(function (err, connection) {
            if (err) {
                reject(err);// not connected!
            } else {
                console.log('开始查询');
                connection.query(sql, arr, function (error, results, fields) {
                    connection.release();
                    console.log('链接已经释放,返回结果');

                    if (error) reject(error);
                    // callback && callback(results, fields)
                    resolve({
                        rows: results,
                        fields: fields
                    })
                });
            }


        });
    })


}

简单的用法到这里就结束了。固然还有更高级的用法,好比MySQL的Cluster操做等。有兴趣的话,能够去研究,由于我目前用不到这种功能,全部就不日后去深究了。

有须要交流的欢迎你们加入QQ群:545594312

相关文章
相关标签/搜索