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とかはちゃんとクラス(関数オブジェクト)定義したほうがいいかも。