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可以連入管理介面
連入後,系統會提醒建立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