node.js/express で CouchDB をパワーアップ大作戦

CouchDB をメインのアプリケーションサーバーとして使っているものの、サーバーサイドで他のサービスと連携したいときにはちょっと不便さを感じてしまいます。

そういうときは、イマドキ?のWeb Frameworkの上で、CouchDBをデータベースとして扱えば良いんですが、CouchDB のアプリと密に連携する(一部の機能のためだけだから)ためには言語も同じにした方が良いだろう、ということで、node.js を使い始めています。

とりあえず、認証をtwitterに任せよう。

CouchDBでアプリ作った場合、ユーザーDB自体はCouchDBに保持されます。。これはちょっとやだ。CouchDBインスタンス毎にユーザー抱えるとか。。。

で、イマドキ、ということで、twitter を認証サーバーとして使うんです。OAuth ができればOKってことで。

PHPとかPythonとかRubyとかJavaとか、GAEとかあるけど、Server Side JavaScript のサンプルがねーYO! ってことで、書いてみました。

実装の中身

gist においときました。Server Side JavaScriptIEがいないから書いていて気持ちが良いですね。

gist: 524406 - GitHub

必要なのは node.js と Express です。 token 保持のセッション周りとか面倒だったので Express に頼りました。Express は Ruby の Sintra に inspire された、node.js 用 Web Framework だそうです。あと、Connect という node.js 用のミドルウェアを使います。

という感じです。実際には oauth モジュールは独立したライブラリとしてnode.jsにあるので簡単に実装できました。 このoauthライブラリは認証用URIに対して、QueryString以外に(たとえばRequest BodyにJSONを埋め込むとか)リクエストを送ることができない、という実装上の制約はあるものの、普通に使う分には問題なさそうです。

ソースコードも一通り見ましたがJavaScriptでも非常にわかりやすい。