CouchAppで例外処理。
そろそろ普通のCouchDB+OpenSocial開発に戻っています。というか、この前確認したCookie認証とOpenSocialのセキュリティトークンを実装すれば、ひとまず試用(!=実用)には耐えうるプロトタイプとして公開はできると思うので正念場。
ですが、CouchDB Applicationのプラクティスにもなるように、気を遣いながら実装しています。開発環境も含めてプラクティスだと思っているのですが、いろいろ試したあげく、emacs/js2-mode+yasnippets に戻って参りました。Rails とかのEmacs設定を全部取っ払って一から.emacs書き直したので快適です。
で、今日はHTTPのエラー処理。
通常showとかでは
return { code: 404 body: "Not Found" };
とステータスコードと本文を送りつければよいのですが、この書き方だと可読性が悪くなるので、次のように書けるようにCrayonにAPIを追加しました。
function(doc, req){ // !code vendor/crayon/lib/error.js if(doc){ // do something }else{ return render_error(NOT_FOUND); } }
ビックリマークを使って、not_found!とかできたRubyが懐かしい。ビックリマークが使えるってこれほどうれしかったんだ、と改めてRubyのセンスの良さを認識しています。
$NOT_FOUND$ とか考えたんですが、打ちにくいのと、お金のにおいが思想なのでネタにしかなりませんね。
ひとまず、error ライブラリでできることはspecに書いてみました。
http://github.com/yssk22/crayon/blob/master/spec/spec.error.js
また、JavaScriptの場合、例外クラス、という考え方がないので、
try{ if(...){ throw(UNAUTHORIZED); } throw(FORBIDDEN); } catch(e){ return render_error(e); }
とかそんな形で書くこともOKです。あとあと困るような気がしないので、NOT_FOUNDとかはちゃんとクラス(関数オブジェクト)定義したほうがいいかも。