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

相關文章
相關標籤/搜索