顯示具有 mysql 標籤的文章。 顯示所有文章
顯示具有 mysql 標籤的文章。 顯示所有文章

2012年12月6日 星期四

MySQL v2.x connector for Node.js

Node.js連線MySQL部分,目前我常用的是mysql這個module
可透過npm install mysql取用...

而最近2.x版本釋出後,發現連線方式有修改了:

var db_options = { 
    host: 'your.database.ip.address',
    port: 3306,
    user: 'username',
    password: 'password',
    database: 'db_name'
};

/* mysql@2.0.0-alpha4連線設定 */
var mysql = require('mysql')


exports.db = mysql.createConnection(db_options);       

如果專案中不確定會用到哪個版本時候
可以這樣寫:

if ( mysql.createClient ) { //v0.9.x
  db = mysql.createClient(db_options);
} else if ( mysql.createConnection ){ //v2.x
  db = mysql.createConnection(db_options);
} else { //more early
  db = new mysql.Client(db_options);
  db.connect(function(err) {
      if ( err ) {
          console.error('connect db ' + db.host + ' error: ' + err);
          process.exit();
      }
  });
}

2012年11月27日 星期二

Using mysql in Node.js

人人都有一套 ORM,
補充一下, JavaScript 其實有支援 Getter, Setter,

另外,根據不可靠消息,看一下各種不同 MySQL Node.js client 效能差異。



Using mysql in Node.js

寫SQL的人通常都會遇到一次一個table有很多欄位的狀況
傳統的方式是透過sql的prepare statement
再透過一個一個的set來設定那些問號(prepare statement中的值帶入方式,一般都以"?"來代表有值耀輸入)
有別於傳統,在物件導向程式語言中可以透過setter的方式來建立欄位
再透過像Hibernate的資料庫framework將資料一次鍵入DB
但Node.js中則沒那麼多規則...
但是如果要處理一堆問號跟參數的傳入,又不想要眼花...可以透過一些"方法"...


目的在提供一個可以重複利用的模組,讓任何require進來的程式可以直接操作 
# vi sql.js
var util = require('util');                                                                                                                                            
function buildSql(params){
  var sql = "insert into xxxx (%s) values (%s)";
  var k = '', v = '';
  var arr = Object.keys(params);
  var cond = [];
  for(var i = 0 ; i < arr.length ; i++){
      k += arr[i] ;
      v += '?';
      if(i < arr.length -1){
        k += ',';
        v += ',';
      }
      cond.push(params[arr[i]]);
  }
  var finalsql = util.format(sql,k,v)
  return {sql:finalsql, cond:cond};
}
exports.buildSql = buildSql;


實作測試
# testSql.js
var sql = require('./sql');                                                                                                                                            
var opt = {}
opt["k1"] = 'v1';
opt["k2"] = 'v2';
var s = sql.buildSql(opt);
console.log(JSON.stringify(s));


結果輸出
# node testSql.js 
{"sql":"insert into xxxx (k1,k2) values (?,?)","cond":["v1","v2"]}


延伸這樣的組和參數與欄位的方式
也可以開發一套lib作為Node.js的Hibernate喔∼