cradle

cradle是一套Apache準備給CouchDB的Node.js套件,透過該套件可以直接完全的存取CouchDB上的資源。

開始使用CouchDB前

CouchDB為Apache出品的NoSQL,包含有完整的網頁控制台以及RESTful API,而cradle即是實作CouchDB RESTful的模組,讓整體操作更為直覺...

開始之前,建議DB安裝在SmartOS(http://smartos.org)或Debian上,以Debian為例,原生的package repository上就包含有CouchDB,安裝可以透過下面方式安裝:

apt-get install couchdb

安裝完成後,透過http 5984 port可以連入管理介面

http://127.0.0.1:5984/_utils

連入後,系統會提醒建立DB admin及其密碼,讓DB可以具備基本的安全性... 而之後可以開始建立DB剛相關檔案。

Github repository

https://github.com/flatiron/cradle

Installation

npm install cradle

Sample Usage

var util = require('util')                                                                                                                                
  , cradle = require('cradle')
  , dbusername = 'username' // 填入你的姓名
  , dbpassword = 'password' // 填入你的密碼
  , databasename = 'datatable' // 填入你的資料表名稱
  , db_address = 'db.server.ip.address' //填入你的DB Server位置
  , db_port = 5984 // 如果不是使用預設port,需要修改
  , db = new(cradle.Connection)('http://' + db_address, db_port, {
    auth: { username: dbusername, password: dbpassword },
    cache: false,
    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-f84647507bd3e29a6deae7c377a74dc","first_name":"simon","last_name":"su"}
this.queryExample('simon',function(err, doc){
  ...
})
*/

//ex: http://123.123.123.123:5984/db/_design/DESIGN/_view/datatable
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);
    //db.compact();
  });
}
/*
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){
  ...
});
*/

exports.deleteExample = function(id, rev, callback) {
  db.remove(id, rev, function(err, res){
    if(err) console.log(err);
    callback(err, res);
  })
}

/** others

//Create Database:
var db = c.database('database_name');
db.create();

//Delete Database
db.destroy(callback);



**/

使用dbmanager來進行實際執行動作

var dbmanager = require('./dbmanager')
  , fs = require('fs');

var id = 'test';
var script = {
  "c1":
  function(){
    dbmanager.createExample(id, 
      {
        "form-type":"html",  //or json
        "form-action":"https://micloud.tw/login",
        "form-body":fs.readFileSync('form.html', 'utf-8'),
        "error-url":"https://www.aaa.com/error",
        "redirect-url":"https://www.aaa.com/success",
        "form-method":"POST"
      }, function(err, res){
      if(err) console.log(JSON.stringify(err));
      console.log(JSON.stringify(res));
    })
  },
  "c2":
  function(){
    dbmanager.createExample(id, 
      {
        "form-type":"json",  //or json
        "form-action":"https://micloud.tw/login",
        "form-body":fs.readFileSync('form.html', 'utf-8'),
        "error-url":"https://www.aaa.com/error",
        "redirect-url":"https://www.aaa.com/success",
        "form-method":"POST"
      }, function(err, res){
      if(err) console.log(JSON.stringify(err));
      console.log(JSON.stringify(res));
    })
  },
  "r":
  function(){
    dbmanager.queryExample(id, function(err, doc){
      if(err) console.log(JSON.stringify(err));
      console.log(JSON.stringify(doc));
    })
  },
  "u":
  function(){
    dbmanager.updateExample(id, {sex:"MX"}, function(err, res){
      if(err) console.log(JSON.stringify(err));
      console.log(JSON.stringify(res));
    })
  },
  "d":
  function(){
    dbmanager.queryExample(id, function(err, doc){
      if(doc)
      dbmanager.deleteExample(id, (doc._rev?doc._rev:null)  , function(err, res){
        if(err) console.log(JSON.stringify(err));
        console.log(JSON.stringify(res));
      })
    })
  }
}

console.log('Do-----------------> %s', process.argv[2]);
script[process.argv[2]]();

執行範例:

執行test code的方法如下,注意:參數部分直接輸入test.js中script的key值即可(代表取出該值代表的function做執行的動作)

# node examples/cradle/test.js c1

results matching ""

    No results matching ""