2012年11月3日 星期六

NodeJS connect Couchdb

CouchDB是NoSQL資料庫的一支,由Apache維護...(這是我選他的最大原因)
預設CouchDB提供RESTful server,並由該Server作為所有API的接口
同時Apache也有許多專案實作接入CouchDB的各市程式語言的API

本篇以想使用Node.js連接Couchdb的部分為教學
假設大家已經有Node.js以及Couchdb的服務...

安裝Cradle套件
# npm install cradle

設定cradle連線couchdb的connection
  db = new(cradle.Connection)(db_address, db_port, {
    auth: { username: dbusername, password: dbpassword },
    cache: true,
    raw: false
  }).database(databasename);
上述建構連線資料庫的基本資訊,包含資料庫位置、port號、帳號、密碼等資訊。

而Couchdb的新刪改查說明如下:

新增一筆資料,id=PK,doc=欲儲存文件,callback=儲存結束後回傳:
db.save(id, doc, callback);

刪除一筆資料,id=PK,rev=版本號碼,callback同上:
db.remove(id, rev, callback);

修改一筆資料,id=欲修改之資料id,doc=欲修改的文件內容,callback同上:
db.merge(id, doc, callback);

查詢一筆資料,id=欲查詢的資料id,callback為查詢回傳,包含查詢結果:
db.get(id, callback);


下面為一個整體的資料庫查詢範例,您可以修改內部的一些實作來變成專案中處理CouchDB的幫手∼

var util = require('util')                                                                                                                                
  , cradle = require('cradle')
  , dbusername = 'your_db_username'
  , dbpassword = 'your_db_password'
  , databasename = 'your_db_name'
  , db_address = 'your.db.address'
  , db_port = 'your_db_port' //default: 5984
  , db = new(cradle.Connection)('http://' + db_address, db_port, {
    auth: { username: dbusername, password: dbpassword },
    cache: true,
    raw: false
  }).database(databasename);

//如果要做到查詢模組∼
exports.queryExample = function(id, callback) {
console.log('Query of %s', id);
db.get( id, function (err, doc) {
if(err) console.log(err);
callback(err, doc);
});
}
/*
ex: sample data: {_id:"simon","_rev":"3-f84647507bd83e29a6deae7c377a74dc","first_name":"simon","last_name":"su"}
this.queryExample('simon',function(err, doc){
...
})
*/

//如果要做到查尋View∼
exports.queryViewExample = function(id, callback) {
console.log('Query of %s', id);
db.view( 'domain/userDomain',{key: userid}, function (err, doc) {
if(err) console.log(err);
callback(err, doc);
});
}
/*
ex: sample data: [{key:"simon", value:{....}},{key:"jelly", value:{....}},{key:"kimi", value:{....}}...]
this.queryViewExample('simon',function(err, doc){
...
})
*/

//如果要建立一筆資料∼
exports.createExample = function(id, doc, callback) {
db.save(id, doc, function(err, res){
if(err) console.log(err);
callback(err, res);
});
}
/*
ex: sample input doc={name:"simon",phone:"0953609275"}
this.createExample(id, doc, function(err, res){
...
});
*/

//如果要更新一筆資料∼
exports.updateExample = function(id, doc, callback) {
db.merge(id, doc, function (err, res) {
if(err) console.log(err);
callback(err, res);
});
}
/*
ex: sample update data id=key_of_row, doc={...}
this.updateExample(id, doc, function(err, res){
...
});
*/


/** 其他範例:
//Create Database:
var db = c.database('database_name');
db.create();

//Delete Database
db.destroy(callback);

更多範例請參考:https://github.com/cloudhead/cradle
**/