CloudantはホストされたCouchDBを提供し、無料のスターターレベルで月に6GBのIOを許可します。CouchDBを学ぶ開発者に適しています。
CouchDBではJavascriptでmap/reduce関数を指定できるため、ClassicASPで実行されているJavascriptを介してCouchDBに接続するのが理にかなっている場合があります。
可能?
CloudantはホストされたCouchDBを提供し、無料のスターターレベルで月に6GBのIOを許可します。CouchDBを学ぶ開発者に適しています。
CouchDBではJavascriptでmap/reduce関数を指定できるため、ClassicASPで実行されているJavascriptを介してCouchDBに接続するのが理にかなっている場合があります。
可能?
はい、どうしてですか?
CloudantにはHTTP/REST経由でアクセスできます。特別なことは何もありません。
ASP Classic / Javascriptは、クライアント側のJavascriptでXMLHttpRequestを使用できるのとほぼ同じ方法で、MSXML2.ServerXMLHttpを使用してリクエストを送信できます。
ASP Classicはどちらでもないため、ブラウザでもNodeでも実行されているとは想定しないCouchDB用のJavascriptライブラリがあれば便利です。スタートは次のとおりです。
https://gist.github.com/3016476
ASPコードの例:
var creds = getCloudantCredentials("cloudantCreds.txt");
var couch = new CouchDB(couchUrl);
couch.connect(creds[0],creds[1]);
var r = couch.listDbs();
say("all dbs: " + JSON.stringify(r, null, 2));
r = couch.view('dbname', 'baseViews', 'bywords',
{ include_docs: false,
key: "whatever",
reduce:true} );
say("view: " + JSON.stringify(r, null, 2));
これは、一連のビューを作成する方法です。
function createViews(dbName, viewSet) {
var r, doc,
empty = function(doc) {
if ( ! doc.observation || doc.observation === '') {
emit(null, doc);
}
},
bywordsMap = function(doc) {
var tokens, re1,
uniq = function(a) {
var o = {}, i = 0, L = a.length, r = [];
for (; i < L; i++) {
if (a[i] !== '' && a[i] !== ' ') {
o[a[i]] = a[i];
}
}
for (i in o) { r.push(o[i]); }
return r;
};
if ( doc.observation && doc.observation !== '') {
tokens = uniq(doc.observation.split(/( +)|\./));
if (tokens && tokens.length > 0) {
tokens.map(function(token) {
emit(token, 1);
});
}
}
};
viewSet = viewSet || 'baseViews';
try {
r = couch.deleteView(dbName, viewSet);
doc = { views: { empty: { map:stringRep(empty) },
bywords: { map:stringRep(bywordsMap)}}};
r = couch.createView(dbName, viewSet, doc);
}
catch (exc1) {
say ('createViews() failed: ' + JSON.stringify(exc1));
}
}
function stringRep(fn) {
return fn.toString()
.replace(/[\s\t]*\/\/.*$/gm, '') // comments
.replace(/\n */gm, ' ')
.replace(/\r */gm, ' ')
.replace(/\{ +/gm, '{')
.replace(/ +\}/gm, '}');
}