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