Couch DBãå«ãNoSQLããŒã¿ããŒã¹ã«ã€ããŠã¯ããã§ã«å€ãã®äººãèããããšããããšæããŸãã ããã§ã¯ãCouchAppãšåŒã°ããCouchDBã«JavaScriptã¢ããªã±ãŒã·ã§ã³ãåã蟌ã絶奜ã®æ©äŒã«ã€ããŠã話ããããšæããŸãã
CouchAppã¯ãCouchDBããã¯ãµã€ãã§ã¯ãCouchDBãããã©ãŠã¶ã«çŽæ¥é ä¿¡ãããJavascriptããã³HTML5ã¢ããªã±ãŒã·ã§ã³ããšèª¬æãããŠããŸãã HTMLã¯ãã®å Žåãã©ãŠã¶ã«æž¡ãããã©ã®HTMLãæž¡ããããã¯ãµãŒããŒäžã§å®è¡ãããJavaScriptã«ãã£ãŠæ±ºå®ãããããããã®ãããªå®çŸ©ã¯å®å šã«æ£ç¢ºã§ã¯ãªããšæããŸãã ãµã€ãã®ã¹ããŒã ã¯ããã®ã¢ã€ãã¢ãããå°ãè¯ã瀺ããŠããŸãã
Browser (UI and links between pages)
-------------- HTTP ---------------
CouchDB (persistence, business logic, and templating)
CouchDBã¯WebãµãŒããŒã§ãïŒãŸãã¯WebãµãŒããŒãå«ã¿ãŸãïŒã JSON圢åŒã®çµæãRESTèŠæ±ã«è¿ãæ©èœãå®è¡ããŸããããã¯ãããããæäœäžã«ããŒã¿ããŒã¹ãšéä¿¡ããäž»ãªæ¹æ³ã§ãïŒããŒã¿ã«å¯ŸããCRUDæäœããããŒã¿ããŒã¹èªäœã®äœæãšåé€ãŸã§ïŒã ãµãŒããŒãšã¯ã©ã€ã¢ã³ãéã®ããŒã¿ã¯ããããHTTPãããã³ã«ãééããHTMLã®éä¿¡ã劚ãããã®ã¯äœããããŸããã ãããè¡ãã«ã¯ãé©åãªæ¹æ³ã§åœŒã«ãããäŒããå¿ èŠããããŸãã
CouchDBã®ã¢ããªã±ãŒã·ã§ã³ã¯ããèšèšããã¥ã¡ã³ããã§å§ãŸããŸãã CouchDBã®ããŒã¿ãå«ããã¹ãŠã®ãã®ã¯ããã¥ã¡ã³ããšåŒã°ããJSON圢åŒã§æå®ãããŠãããããããã¥ã¡ã³ãã®ãã¶ã€ã³ã«éãã¯ãããŸããã ãã¡ãããç¹å¥ãªæ¹æ³ã§åŒã³åºãããç¹å®ã®æ§é ãæã€å¿ èŠããããŸãã ããã¥ã¡ã³ãèªäœã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã³ãŒããå«ãŸããŠããŸãã
æãåçŽãªããŒã¹ããã¥ã¡ã³ãã¯æ¬¡ã®ããã«ãªããŸãã
{
"_id" : "my_doc" ,
"_rev" : "1-7a8b01193c8798fa555243b354d1e9d7"
}
èšèšããã¥ã¡ã³ãã«ã¯ã
_design/app_name
ãšãã圢åŒã®_idãå¿ èŠ
_design/app_name
ã ã¢ããªã±ãŒã·ã§ã³ã®JavaScriptã³ãŒãã¯ãããã¥ã¡ã³ãã®ãã¶ã€ã³ãå®çŸ©ããJSONãªããžã§ã¯ãã®ãã£ãŒã«ãã«åºãããŸãïŒé©åãªã·ãŒã«ãä»ãïŒã ãŸãããã¡ã€ã«ãªã³ã¯ïŒæ·»ä»ãã¡ã€ã«ïŒãã¢ããªã±ãŒã·ã§ã³ãããã§ã¹ããªã©ãä»ã®ã¢ããªã±ãŒã·ã§ã³å±æ§ã瀺ããŸãã ã¢ããªã±ãŒã·ã§ã³ã®å±éã§ã¯ãããã¥ã¡ã³ãã®ãã¶ã€ã³ãšãã¡ã€ã«ãªãœãŒã¹ïŒæ·»ä»ãã¡ã€ã«ïŒãããŒã¿ããŒã¹ã«èªã¿èŸŒã¿ãŸãã
ãæ°ã«å ¥ãã®ãšãã£ã¿ãŒã§JSã³ãŒããæ£åžžã«åäœãããããã«ãèšèšãã©ã«ããŒã®ã¢ããªã±ãŒã·ã§ã³ãã©ã«ããŒããå°ããã€åéããã®ã§ã¯ãªãã couchappãŠãŒãã£ãªãã£ããããŸãã Pythonã§æžãããŠãããã¢ããªã±ãŒã·ã§ã³ãªãœãŒã¹ãåäžã®jsonããã¥ã¡ã³ãã«åéããŠãµãŒããŒã«éä¿¡ããããšãçŽæããŠããŸã;æ·»ä»ãã¡ã€ã«ã¯å¥ã ã«æ³šãããŸãã ãŸããã¢ããªã±ãŒã·ã§ã³ã®åæãã©ã«ããŒæ§é ãçæãããããããªãœãŒã¹ãåéããããšãã§ããŸãã
ãããã£ãŠãæåã«ãã¹ãããšã¯couchappãŠãŒãã£ãªãã£ãã€ã³ã¹ããŒã«ããããšã§ãã ã€ã³ã¹ããŒã«ããã»ã¹ã«ã€ããŠã¯èª¬æããŸãããã wikiã«ããæžãããŠããŸã ã
ããã«ãããŒã¹ã«æ £ããããã«ãããŒã¹ãèªåã§çœ®ãããç¡æã®CouchDBãã¹ãã£ã³ã°ã«ç»é²ããããšãã§ããŸãã æåŸã®éžæè¢ãéžã³ãŸããã ãã®äžã®ãã¹ãŠã¯åé¡ãããŸããïŒå¶éã«ã€ããŠã¯äœãèšããŸããïŒããã ããããã§ãã°ãèŠãããšãã§ãããããã«å¿ããŠã¢ããªã±ãŒã·ã§ã³ããããã°ããã®ãé£ããå ŽåããããŸãã
ããã§ããã¹ãŠã®æºåãæŽããŸããã
éå§ãã
ç§ã¯ãHello worldããããå€ããåæç§æžã§éçºãããŠããããã°ãšã¯ç°ãªãäœããæžããããšæã£ãŠããŸããããåæã«ãããã¥ã¡ã³ãã®äŸãèŠãŠãã³ãŒãã®ç§»æ€ã«ããŸã倢äžã«ãªããªãããã«ã¢ããªã®ãã¥ãŒããªã¢ã«ã å®è·µã瀺ãããã«ãããã«ãããæ°ãããã¯ãããžãŒã®åãæ±ãã®ãã¥ã¢ã³ã¹ãããã«ç解ã§ããŸãã
説æããã¢ããªã±ãŒã·ã§ã³ã¯ãå€åœèªãåŠç¿ããããã®ãããããã©ãã·ã¥ã«ãŒãã§ãã ååã¯åçŽã§ã-人çã§ã¯ãã«ãŒãã®çåŽã«åèªãã¿ãŒã²ããèšèªã§æžãããŠãããå察åŽã«ãã®ç¿»èš³ããããŸãã ãããã£ãŠãã¢ããªã±ãŒã·ã§ã³ã§ã¯ããŠãŒã¶ãŒã¯ã«ãŒãã®ã»ããïŒã»ããïŒã®ãªã¹ãã衚瀺ããããã®ã€ã³ã¿ãŒãã§ãŒã¹ãã«ãŒãäžã®åèªãè¿œå ããã³å€æŽããŠã»ãããç·šéããæ©èœãããã³ã«ãŒããå®è¡ããããã®ã€ã³ã¿ãŒãã§ãŒã¹ãå¿ èŠã§ãã
ããŒã¿ããŒã¹å ã®äžé£ã®ã«ãŒãã®ããã¥ã¡ã³ãã¯æ¬¡ã®ããã«ãªããŸãã
{
"_id": "my set",
"_rev": "1-7a8b01193c8798fa555243b354d1e9d6",
"type": "set",
"cards": [
{
"front": "front_text",
"back": "back_text"
},
{
"front": "front_text second",
"back": "back_text second"
}
]
}
ã_idã-ã»ããã®äžæã®èå¥åãåæã«ãã®ååïŒç°¡åã«ããããïŒ
ã_revãã¯ã»ããã®ãªããžã§ã³çªå·ã§ãã ããã¥ã¡ã³ããä¿åãŸãã¯äœæãããšãã«çç¥ã§ããèªåçã«å ¥åãããŸãã
ãã£ãŒã«ãã_idãããã³ã_revãã¯ãããã¥ã¡ã³ãã®å¿ é å±æ§ã§ãã
ãã¿ã€ãã-ããã¥ã¡ã³ãã®ã¿ã€ãã CouchDBã«ã¯ããŒãã«ããªãããã¹ãŠã®ããã¥ã¡ã³ãã¯ããŒã¿ããŒã¹å ã§é£ãåã£ãŠãããããéžæäžã«ç¹å¥ãªãã£ãŒã«ãã䜿çšããŠåçŽã«åºå¥ããã®ã䟿å©ã§ãã
ãã«ãŒãã-ã«ãŒããå®çŸ©ãããªããžã§ã¯ãã®é åã ãã«ãŒããã¿ã€ãã®ããã¥ã¡ã³ãã«åã«ãŒããåå¥ã«ä¿åã§ããŸãããåçŽãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ããããè¡ããªãããšã«ããŸããã
æ°ããã»ãããäœæããããæ¢åã®ã»ãããç·šéããããã®ãã©ãŒã ã§ããŒãžãäœæããŸãã
ããŒãžãç·šé
CouchAppã«ã¯ã衚瀺æ©èœããšããæŠå¿µããããŸãã ãã®é¢æ°ã¯ãããŒã¹ããã¥ã¡ã³ããã€ãŸã ãããå¥ã®æ§é ã«å€æããŸããããšãã°ãHTMLåºåãçæã§ããŸãã
ã·ã§ãŒé¢æ°ã¯jsãã¡ã€ã«ã«ä¿åãããshowsãã©ã«ããŒã«é 眮ããå¿ èŠããããŸãã ã¢ãã¬ã¹httpïŒ//// _ design / flashcards / _show / edit /ããã³httpïŒ//// _ design / flashcards / _show / edit / <document_id>ã«ã¢ã¯ã»ã¹ãããšãç·šéé¢æ°ã®åŒã³åºããçºçããŸãã
ãã¡ã€ã«ã®ã³ãŒãã¯ã\ããŒãžã®\ edit.jsã瀺ããŠããŸãã
function (doc, req) {
//!json shows._edit
var Mustache = require( "vendor/couchapp/lib/mustache" ),
path = require( "vendor/couchapp/lib/path" ).init(req);
var data = {
assets : path.asset(),
indexPath : path.list( 'sets' , 'all-sets' , {descending: true , limit:10})
};
data.doc = doc || {};
return Mustache.to_html(shows._edit, data);
}
Showé¢æ°ã¯ãèŠæ±ãããããã¥ã¡ã³ãïŒèŠæ±ãããèŠã€ãã£ãå ŽåïŒãããã³çä¿¡èŠæ±ãèšè¿°ãããªããžã§ã¯ããèŠæ±ããããã©ã¡ãŒã¿ãŒãšããŠåãå ¥ããŸãã æåã®ã±ãŒã¹ã§ã¯ãããã¥ã¡ã³ãã¯ååšããŸããã
次ã¯ã³ã¡ã³ãã§ãããã¯ãã¡ã€ã«ã®å 容ãæžã蟌ãã¹ã¯ãªããïŒãã¯ããšåŒã°ããïŒã®couchappãã£ã¬ã¯ãã£ãã§ã\ã·ã§ãŒ\ _edit *å€æ°ãshows._editãã«ã ã€ãŸããæ¡åŒµåã«é¢ä¿ãªãããã©ã«ããŒã«ã¯_editãšããååã®ãã¡ã€ã«ãè€æ°å«ããããšã¯ã§ããŸããã ãã®å Žåã_edit.htmlãã¡ã€ã«ãããã«ãããŸããããã«ã¯ããã©ãŒã ãå«ãããŒãžã®ã³ãŒããå«ãŸããŠããŸãã åŸã§æ»ããŸãã
次ã¯2ã€ã®ã¢ãžã¥ãŒã«ã®ã€ã³ããŒãã§ãã CouchDBã¯ããµãŒããŒåŽã®JavaScriptãéçºããããã«CommonJSã®èŠåã«åŸã£ãŠãããããNode.jséçºè ã«ãšã£ãŠã€ã³ããŒãæ©èœã¯ããªãã¿ãããããŸããã ç§ã¯Node.jsã䜿çšããŠããªãã£ããããCouchDBã§äœ¿çšå¯èœãªæ©èœã«é¢ããããã¥ã¡ã³ããèŠã€ããããšãã§ããŸããã§ããã CouchDBã®ã³ãŒããèŠãŠãäŸãç解ããå¿ èŠããããŸããã
æåã®ã¢ãžã¥ãŒã«ã¯Mustacheã§ããã¹ãŠã®ã¬ã³ããªã³ã°ãæ åœããŸãã æºåããããŒã¿ã§htmlããŒãžãã¬ã³ããªã³ã°ããããã«å¿ èŠã§ãã 2ã€ç®ã¯ãã¹ã§ããããã«ãããããŒã¿ããŒã¹ãæäœããããã®jsã¹ã¯ãªãããªã©ãã¢ããªã±ãŒã·ã§ã³ããã³ãªãœãŒã¹ã®ä»ã®ããŒãžãžã®ãªã³ã¯ãçæã§ããŸãïŒäžéšã¯ãããžã§ã¯ãã®åæåæã«couchappã«ãã£ãŠçæãããäžéšã¯ããŒã¿ããŒã¹ã®WebãµãŒããŒã§æ¢ã«å©çšå¯èœã§ãïŒã
次ã«ãã¢ãã«ãªããžã§ã¯ããäœæãããŸãïŒMVCãã¿ãŒã³ããïŒã ã¢ã»ãããã£ãŒã«ãã¯ãã¹ã¯ãªãããé 眮ããããã£ã¬ã¯ããªã®URLãã¬ãã£ãã¯ã¹ã§ããindexPathã¯ãã»ããã®ãªã¹ããå«ãããŒãžã®URLã§ãã ææžã®ãªã¹ãã®è¡šç€ºã¯ãåŸã§èª¬æãããªã¹ãé¢æ°ã«ãã£ãŠè¡ãããŸãã .listã¡ãœããã¯ãsetsé¢æ°ãžã®ãªã³ã¯ãæäŸããsetsé¢æ°ã¯all-setsãã¥ãŒé¢æ°ã®çµæãæž¡ããŸãã
以äžã¯ãããã¥ã¡ã³ãèªäœã®ã¢ãã«ãžã®è¿œå ã§ãã ã«ãŒãã®ã»ããã ãã§ã«æžããããã«ãããã¥ã¡ã³ãã®IDã䜿çšããŠããŸãã¯ããã¥ã¡ã³ãã䜿çšããã«ãç·šéæ©èœã«ã¢ã¯ã»ã¹ã§ããŸãã ããã¥ã¡ã³ããèŠã€ãã£ãå Žåãdocãã©ã¡ãŒã¿ãŒã«å«ãŸããŸãã èŠã€ãããªãã£ãå Žåã¯ãã»ããã®ç©ºã®ãªããžã§ã¯ããäœæããŸãã ãããã£ãŠãã»ããç·šéããŒãžãéããšãæ°ããã»ãããŸãã¯æ¢åã®ã»ãããç·šéãããŸãã
ã»ããã®ã¬ã³ããªã³ã°ãæ åœããããŒãžã®htmlã³ãŒãã®äžéšïŒ
< form id = "new-post" method = "post" >
{{#doc}}
< label > Set name < / label > < input type = "text" size = "20" name = "_id" value = "{{_id}}" >
< ul class = "cards" >
{{#cards}}
< li >
< label > Front < / label > < input type = "text" size = "20" name = "front" value = "{{front}}" >
< label > Back < / label > < input type = "text" size = "20" name = "back" value = "{{back}}" >
< / li >
{{/cards}}
< li >
< label > Front < / label > < input type = "text" size = "20" name = "front" >
< label > Back < / label > < input type = "text" size = "20" name = "back" >
< / li >
< / ul >
< button id = "add" > Add < / button >< br / >< br / >
{{/doc}}
< input type = "submit" value = "Save →" / >
< span id = "saved" style = "display:none;" > Saved < / span >
< br / >< br / >
< / form >
ç¹å¥ãªããšã¯äœããããŸããã ãã¹ãŠå£ã²ãã«åŸã£ãŠã
ãã©ãŒã ã衚瀺ããåŸããã©ãŒã ãä¿åããæ©èœãèšè¿°ããå¿ èŠããããŸãã ãããè¡ãã«ã¯ãäžé£ã®ã«ãŒãã®JSONããã¥ã¡ã³ããå«ãPOSTãªã¯ãšã¹ããéä¿¡ããŸãã ãããè¡ãããã«ã次ã®ã¹ã¯ãªãããããŒãžã«è¿œå ãããŸãïŒ/_utils/script/jquery.jsããã³/_utils/script/jquery.couch.jsã 1ã€ç®ã¯jQueryã2ã€ç®ã¯CouchDBã®ã¯ãšãªãæŽçããjQueryãã©ã°ã€ã³ã§ãã
次ã«ãã¹ã¯ãªããïŒ
( function ( $ ) {
$ ( '#new-post' ) . submit ( function ( ) {
var self = $ ( this ) , setName = $ ( 'input[name=_id]' , this ) . val ( ) ,
oldSet , newSet = { } , db = $. couch . db ( 'flashcards' ) ;
function saveDoc ( set ) {
db. saveDoc ( set ) , {
success : function ( resp ) {
window. location . reload ( true ) ;
}
} ) ;
}
//collect cards array
newSet. cards = $ ( 'ul.cards input' ) . toArray ( ) . reduce ( function ( arr , el , idx ) {
if ( ! ( idx % 2 ) ) { arr [ arr. length ] = { } ; }
arr [ arr. length - 1 ] [ ! ( idx % 2 ) ? "front" : "back" ] = el. value ;
return arr ;
} , [ ] ) ;
//retrieve old set if found or create new
db. openDoc ( setName , {
error : function ( code ) {
oldSet = { } ;
if ( setName. length ) {
oldSet._id = setName ;
}
saveDoc ( $. extend ( oldSet , newSet ) ;
} ,
success : function ( response ) {
oldSet = response ;
saveDoc ( $. extend ( oldSet , newSet ) ;
}
} ) ;
return false ;
} ) ;
} ) ( jQuery ) ;
äž»ãªããŒã¿ããŒã¹æäœã¯æ¬¡ã®ãšããã§ãã
1.
var db = $. couch . db ( 'flashcards' )
var db = $. couch . db ( 'flashcards' )
var db = $. couch . db ( 'flashcards' )
-saveãopenãªã©ãåŒã³åºãããã®ããŒã¿ããŒã¹ãªããžã§ã¯ãã®ååŸ
2.
db. openDoc ( id , callback )
db. openDoc ( id , callback )
ããŒã¿ããŒã¹ããããã¥ã¡ã³ããååŸããŸãã ããã¥ã¡ã³ãã®ææ°ããŒãžã§ã³ãååŸããããã«äœ¿çšãããŸãã ææ°ã®ãªããžã§ã³ãå«ãããã¥ã¡ã³ãããµãŒããŒã«éä¿¡ããå¿ èŠããããŸããããããªããšãããã¥ã¡ã³ãã¯æåŠãããŸãã CouchDBã¯ããªãœãŒã¹å ±æã®å ±æãšãããã®ååã®ã¿ãå®è£ ããŠããŸãã ããã¥ã¡ã³ããèŠã€ãããªãå Žåãæ°ããã»ãããäœæããããšèŠãªãããŸãã 次ã«ãã»ãããªããžã§ã¯ãå šäœãããŒã¿ããŒã¹ã«ä¿åãããŸãã
3.
db. saveDoc ( doc , callback )
db. saveDoc ( doc , callback )
-ããã¥ã¡ã³ããããŒã¿ããŒã¹ã«ä¿åããŸãã ãã¹ãŠãæåãããšãããŒãžããªããŒããããŸãã äœããããŸããããªãã£ãå Žåãå€ããªããžã§ã³ãéä¿¡ãããå Žåã«ãããçºçããå¯èœæ§ãããã®ã§ãèæ ®ããŸããã
ããã§ããããã»ãããäœæããã³ç·šéããããã®ãã¹ãŠã®æ©èœã䜿çšã§ããŸãã ã»ããã®ãªã¹ãã®è¡šç€ºã«ç§»ããŸãããã
ãªã¹ã衚瀺
ãªã¹ãã衚瀺ããåã«ãéžæããå¿ èŠããããŸãã ãµã³ããªã³ã°ã¯ãã¥ãŒã䜿çšããŠè¡ãããŸãã ã¯ãšãªãåçã«æ§ç¯ããããŒãã«å ã®ããŒã¿ãåŠçã§ããSQLãšã¯ç°ãªãããã¥ãŒã®åäœã¯å°ãç°ãªããŸãã HTTPèŠæ±ãããã¥ãŒã«ãã©ã¡ãŒã¿ãŒãæž¡ãæ¹æ³ã¯ãããŸãããããã¥ãŒããåä¿¡ããçµæã«é©çšã§ããŸãã
ãã¥ãŒã¯ãããŒã¿ããŒã¹å ã®åããã¥ã¡ã³ãã«é©çšãããæ©èœã§ãã ããã䜿çšããŠããã®ãã£ã«ã¿ãªã³ã°ã®çµæã«ã€ã³ããã¯ã¹ã課ãããã«ãããã¥ã¡ã³ãã®ãã£ã«ã¿ãªã³ã°ãå®è¡ãããŸãã ãã¥ãŒã¯ããããæ©èœãšãªãã·ã§ã³ã®ãªãã¥ãŒã¹ã§æ§æãããŸãã ãã¹ãŠã®ã»ããã衚瀺ããã«ã¯ãé¢æ°\ãã¥ãŒ\ãã¹ãŠã®ã»ãã\ map.jsïŒãã¹ãŠã®ã»ããã¯ãã¥ãŒãšåŒã°ããŸãïŒã¯æ¬¡ã®ãšããã§ãã
function ( doc ) {
if ( doc. type === 'set' && doc. cards ) {
emit ( doc._id , null ) ;
}
}
ããã§ã¯ãããã¥ã¡ã³ããã»ããã¿ã€ãã«æºæ ããŠãããã©ãããããã³ã«ãŒããå«ãã¢ã¬ã€ãååšãããã©ããããã§ãã¯ãããŸãã äžèŽããå Žåãemité¢æ°ãåŒã³åºãããŸããããã¯ãããŒãšå€ã®2ã€ã®åŒæ°ãåããŸãã ã»ãããªã¹ãã衚瀺ããã«ã¯ã2çªç®ã®ãã©ã¡ãŒã¿ãŒã®å€ã¯åœ¹å²ãæãããŸããã å¿ èŠãªã®ã¯ãã»ããã®ååãè¡šãããŒã ãã§ãã ãŸããçµæã䞊ã¹æ¿ããŸãã ååŸããããŒã®ã»ããã«åºã¥ããŠãã€ã³ããã¯ã¹ãæ§ç¯ãããŸãã
衚瀺ããã«ã¯ãéžæç¯å²ãçµã蟌ãã¯ãšãªãäœæã§ããŸãã äžéšã®ã¯ãšãªã§ã¯ãéèŠãªããŒçæã¹ããŒã ãå¿ èŠã§ãããä»ã®ã¯ãšãªã§ã¯ãè¿œå ã®ãªãã¥ãŒã¹æ©èœãå¿ èŠã§ãã ããã«ã€ããŠã®ããã¥ã¡ã³ãã¯ããã«ã€ããŠããæžãããŠããã®ã§ãç§ã¯ããã«çŠç¹ãåãããŸããã
ãã¥ãŒãå®çŸ©ããããçµæã®è¡šç€ºãèšå®ã§ããŸãã ããã¥ã¡ã³ãã衚瀺ããããã«showé¢æ°ã䜿çšãããå Žåãããã§ãªã¹ãé¢æ°ãå¿ èŠã§ãã é¢æ°\ãªã¹ã\ sets.jsïŒ
function ( head , req ) {
// !json lists._sets
var Mustache = require ( "vendor/couchapp/lib/mustache" ) ,
path = require ( "vendor/couchapp/lib/path" ) . init ( req ) ;
provides ( 'html' , function ( ) {
var data = {
assets : path. asset ( ) ,
createNewLink : path. show ( 'edit' )
} ;
data. sets = ( function ( ) {
var row , set , arr = [ ] ;
while ( row = getRow ( ) ) {
set = row. value ;
arr. push ( {
title : row. id ,
showView : path. show ( 'set' , row. id ) ,
editLink : path. show ( 'edit' , row. id ) ,
runsetLink : path. asset ( 'flashcards_zeptojs.html' ) + '#' + row. id
} ) ;
}
return arr ;
} ) ( ) ;
return Mustache. to_html ( lists._sets , data ) ;
} ) ;
}
showé¢æ°ã®é¡èãªç¹åŸŽã¯ããã¥ãŒã®è¡ãè¿ãèŠæ±ã®content-typeãšgetRowïŒïŒãäžèŽããå Žåã«ã³ãŒã«ããã¯ãåŒã³åºããæäŸïŒcontent_typeãã³ãŒã«ããã¯ïŒé¢æ°ãããã§å©çšã§ããããšã§ãã æååã衚瀺ãããã¥ãŒã¯ãURLã§æ±ºå®ãããŸãïŒhttpïŒ//// _ design / flashcards / _list / sets / <view-name>ïŒ ãã¥ãŒã®ãã©ã¡ãŒã¿ãŒã¯ãé¢æ°ã®headãã©ã¡ãŒã¿ãŒãšãreqã®å€æ°ã®HTTPèŠæ±ãã©ã¡ãŒã¿ãŒã«æžã蟌ãŸããŸãã æ®ãã«ã€ããŠã¯ãshowé¢æ°ãšåãæ¹æ³ã§é²ããŸãããã³ãã¬ãŒããååŸããããã«çµæã®ã¢ãã«ãæž¡ããçµæãè¿ããŸãã
èšäºã®ç¯å²å€ã§ãã«ãŒãã®ã»ãããšå®è¡ã€ã³ã¿ãŒãã§ãŒã¹èªäœã®ãã¬ãã¥ãŒãå«ã2ã€ã®ããŒãžããããŸãããããããã¯ãŸã£ããç°¡åã§ãäžèšã®åãæ©èœã®ã»ããã«ãã£ãŠå®è£ ãããŠããŸãã
ããã¯ãããããCouchAppãç解ããããã«å¿ èŠã ãšæããã¹ãŠã§ãã ãã®åŸãå®å šã«ããã¥ã¡ã³ãã«ç®ãåããæå³ã®ããäœããå®è£ ã§ããŸãã
ãããã«
CouchAppã§CouchDBãåŠç¿ããçµéšã®æ®ãã®éšåïŒ
1.éåžžã«æŒããããããã¥ã¡ã³ãã
CouchDB Bookã¯ããã®2ã€ã®ããŒãžã§ã³ïŒ1.0ãšãã©ããïŒã§ããããªãã¯ãã¡ã€ã³ã«ãããããŒã¿ããŒã¹èªäœã®åºæ¬æŠå¿µã詳现ã«æããã«ããŠããŸãããcouchAppã®èª¬æã¯éåžžã«è€éã§ã¹ããŒã¹ããããŸãã ãã¹ãŠãã©ã®ããã«æ©èœãããã®äžè¬çãªå³ãååŸããã«ã¯ãããŸããŸãªããã°ãšã³ããªã調ã¹ãå¿ èŠããããŸãã 300ããŒãžãèªãã§é«åºŠãªç解ãåŸãã®ã¯ç§ã«ã¯å°ã倧å€ãªããã«æããŸãããæ¬å šäœãèªãããšã§å®å šã«ç解ã§ãããšã¯éããŸããã äžæ¹ãç¥èãªç¢æã®ã¿ã衚瀺ããæ·±ãã¯è¡ããªããšããå°ããªhelloworldã®èšäºããããŸãããããã¯ã»ãšãã©å©ç¹ããããŸããã
é¢çœãã®ã¯ãCouchAppã«JavaScript APIã®èšè¿°ããªãããšã§ãã ããã«ã couchone.com ã wiki.apache.org/couchdb ããŸãã¯couchapp.orgã®å ¬åŒWebãµã€ãã§ãããã®ãããªAPIãžã®åç §ã¯èŠã€ãããŸããã§ããã
CouchDBã®æ¬ã§ã¯ãGitHubã«ããSofaã®äŸïŒããã°ïŒãåç §ããããšãæšå¥šããŠããŸãã ãããŸã§ã®ãšããããã®ã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒãã¯ãªããªã£ãŠãããããé ãã«ããé¡äŒŒç¹ã®ã¿ãèŠã€ããããšãã§ããå Žæã§ã®ã¿ã§ãã ããã«ãæ¬ã®ã¢ããªã±ãŒã·ã§ã³ã³ãŒããããªãåºæ¬çãªãã®ã䜿çšããŠããå Žåããªããžããªã®ã¢ããªã±ãŒã·ã§ã³ã¯ãã§ã«é«ã¬ãã«ã®æ§é ã䜿çšããŠããŸãã äœãããããã¯ããã»ã©æããªãã§ãããCouchAppãéããã°ããã®äººã«ãšã£ãŠã¯ãããŸãã«ãé£ãããšæããŸãã ããã¯ãµãŒããŒãµã€ãJSã§ã®çµéšã®å©çšå¯èœæ§ã«ãã£ãŠä¿é²ããããããããŸãããç§ã¯ç¥ããŸãããç§ã¯ãã®ãããªçµéšãæã£ãŠããŸããã§ããã
ãŸããæäŸãããŠããjavascriptã©ã€ãã©ãªã®ããã¥ã¡ã³ããäžè¶³ããŠããããšãæ鬱ã§ãã ããããã©ãã«ããã®ãã¯æããã§ã¯ãããŸããïŒäžéšã®ã©ã€ãã©ãªã¯couchappã¹ã¯ãªããã«ãã£ãŠæäŸãããäžéšã¯æ¢ã«ãµãŒããŒäžã«ããããšãããã«ã¯ç¥ããŸããã§ãããããã以å€ã®å Žæã¯ãŸã ææ¡ããªããã°ãªããŸããã§ããïŒã ããšãã°ãCouchDBãªãŒãã®åŠ»ã®ããã°ã§ãJavaScriptã©ã€ãã©ãªïŒ1ã€ã¯ãã¬ãŒã³jsããã1ã€ã¯jqueryããŒã¹ïŒã®ãã¹ãã±ãŒã¹ã®èª¬æããããããŒã¿ããŒã¹ãžã®ajaxã¯ãšãªãå®è¡ããŸãã ãã ãããããã®ã©ã€ãã©ãªã¯Sofaã¢ããªã±ãŒã·ã§ã³ã§ã¯äœ¿çšãããŸããã ããã§å¥ã®ã©ã€ãã©ãªã䜿çšããããã®æ©èœãæ¡åŒµãããŸãããäœããã®çç±ã§ãæåã®èŠæ±ã§ã¢ããªã±ãŒã·ã§ã³ã®èšèšããã¥ã¡ã³ãå šäœãåŒãåºããŠãããããURLãæ£ããæ§ç¯ããŸãã ãããŠãç§ã®å°ããªã¢ããªã±ãŒã·ã§ã³ã§ãã£ãŠãããã¶ã€ã³ããã¥ã¡ã³ãã®ãµã€ãºã¯çŽ1ã¡ã¬ãã€ãã§ãã
äžè¬çã«ãããã¥ã¡ã³ãããå€æãããšããããžã§ã¯ãã¯éåžžã«æ·±å»ãªåŠçã®åæ¥èšŒæžã§ãã£ã±ãã§ããã補åãæ·±å»ã§ãããšããäºå®ã«ãããããããåçšè£œåã§ã¯ãããŸããã
2.ã»ãã¥ãªãã£ã¢ããªã±ãŒã·ã§ã³ã
æåã¯ã絶察ã«ãã¹ãŠã®ãŠãŒã¶ãŒãããŒã¿ããŒã¹ã¯ãšãªãå®è¡ã§ããŸãã ããã¯ãããŒã¿ããŒã¹ãŠãŒã¶ãŒãæå®ããããšã«ããçŠæ¢ãããŠããŸãã ããããCouchAppã¯1ã€ã®ããŒã¿ããŒã¹å ã§å転ããŠããããããŠãŒã¶ãŒãCouchAppã«ã¢ã¯ã»ã¹ã§ããå Žåããã¹ãŠã®ããã¥ã¡ã³ãã«å®å šã«ã¢ã¯ã»ã¹ã§ããŸãã ãŸããé¢æ°ã®æ€èšŒã¬ãã«ã§æžã蟌ã¿ãçŠæ¢ã§ããå Žåãèªã¿åãã¯æ©èœããŸããã æ¿èªããããŠãŒã¶ãŒã¯ããã«ãã€ã³ãªã¯ãšã¹ã/ _all_docsãäœæããããŒã¿ããŒã¹å ã®ãã¹ãŠã®ããã¥ã¡ã³ããåä¿¡ã§ããŸãã
ãããåé¿ããã«ã¯ãApacheã®äžã«ããããã蟌ã¿ãäžèŠãªURLããã¹ãŠéããããããªURLã®è³ªåïŒãŠãŒã¶ãŒã¯/ _lists / sets / ...ïŒã«ç§»åããŸããïŒã解決ããŸãããç§ã¯ãããè©ŠããŸããã§ãããåãcouchapp.orgã¯æ©èœããŸããã
ãã®ãã¹ãŠãããã»ãã¥ãªãã£ãåŠçãããã©ãŒã ããã®POSTãªã¯ãšã¹ããåŠçããäœããã®çš®é¡ã®ã¢ããªã±ãŒã·ã§ã³ã®èåŸã«CouchDBã眮ãæ¹ãèœã¡çããšçµè«ä»ããããšãã§ããŸãã ãããããããžã§ã¯ãã¯éçºäžã§ãããç掻ãç°¡çŽ åããé©æ°ã«ã€ããŠæ£æ°ã®ææžãæžãããŠãããªããç§ã®æèŠãåèããããšãã§ããŸãã
ããããšããç§ã¯ãããé¢çœãã£ããšæããŸã