node.js + express

久々の更新。なるべく更新していきたいと思う。

サーバサイドJavascriptのnode.jsが流行なので試してみた。それと、node.jsだけでもWebアプリは作れるがSinatra風のexpressというWAFが話題らしいのでそれも合わせてインストール。

パッケージマネージャ周りがnave,npmと2つあってややこしくて、

  • naveは、node.jsの複数のバージョンを切り替えて使うためのもの(Perlでいうところのperlbrewみたいなもの)
  • npmは、node.js上のアドオンパッケージのためのパッケージマネージャ。
  • まずnaveをインストールし、そのnaveでnode.js本体とnpmをインストールする
  • npmでexpressなどの個別のパッケージをインストールする

というものらしい。

以下、ubuntu10.04にて。

(注)以下、筆者がミスってnode.jsの開発最新版(v0.7.5)でやってしまったため、安定版(v0.6.12)のインストールの場合と内容が少し異なります。それでもよければお読みください。

naveのインストール

# mkdir opt; cd opt
# git clone git://github.com/isaacs/nave.git

ここはgitからクローンするだけ。

node.jsのインストールと起動

# cd nave
# ./nave.sh install latest
(ダウンロード&ビルドされるので、しばし待つ)

g++が必要で、関係ないエラーが出てもまずはg++をチェック。ビルド終わったら以下で起動。

# ./nave.sh use latest

インストールされているバージョンを確認するにはnave.shのlsコマンド。
バージョンを指定して起動した場合は、useの後にバージョン番号。

# ./nave.sh ls
src:
0.7.5
installed:
0.7.5
(以下略)
# ./nave.sh use 0.7.5

デーモンプロセスではないので.bashrcなどにnave.sh useを書いておくと便利。

npmのインストール

シェルスクリプトをDLして実行するだけだが、curlを使うと便利。

curl http://npmjs.org/install.sh | sh

expressのインストール

node.jsはアプリケーションごとのローカルフォルダ配下にモジュールを置いて使うポータルブルな感じ(?)を志向しているようで、npm install コマンドもデフォルトだとカレントディレクトリ下にパッケージをインストールしてくれる。

# npm install express

ただexpressは共通のところにインストールしておきたいので-g オプションをつけてグローバルインストールして、linkコマンドでsymlinkを張る、というのが便利。

# npm install -g express
# npm link express

ここで、(本当は良くないのだが)rootで作業してるとグローバルインストールはパーミッションエラーが出るので、それを無視するコマンドが以下。

# npm config set unsafe-perm true

ちなみにこの辺りをググるとNODE_PATHを通せとか言われるが、グローバルインストールしている限りNODE_PATHは意識しなくても大丈夫。念のため。

いくつか修正

現バージョンのexpress1.0.7をnpm1.1.4でインストールするとそのままでは動かないので、2点修正が必要だったので書いておきます。

  • expressが依存するconnectというパッケージを(npmが最新版を入れてくれてしまうのが動かないので)古いバージョン0.5.10に差し替え
# npm install connect@0.5.10
# rm -rf node_modules/express/node_modeles/connect
# mv node_modules/connect node_modules/express/node_modules
  • expressのソース中のrequire('sys')をrequire('util')に書き換え(node.jsの最新版の仕様変更)
 # sed -i "s/require('sys')/require('util')/g" `grep -rl "require('sys')" express`

これで私の環境では動作確認できた。

動作確認

サンプルプログラム

// "server.js"
var app = require("express").createServer();
app.get("/",function(req,res){
        res.send("hello, world");
        console.log([req,res]);
});
app.listen(8080);

起動コマンドは以下。

# node server.js

expressはデフォルトで"0.0.0.0"でlistenするようなのでリモートからブラウザで8080にアクセスして確認できる。

あとは、expressの使い方だが、あまりマニュアルなどは整備されて無いようなのでSinatra風の試行錯誤で頑張るという感じだろうか。

(追記)node.js 0.7.5は開発版 → 0.6.12をインストールすべき。

node.jsの安定版は現在0.6.12で、開発版の0.7.5だとexpressも古いバージョンしか対応してなくて、それでnpmが古いexpressを入れてしまうので、nave install latestはあまり通常使用には向かないようだ。(それ早く行ってよーw)。なので本エントリは参考程度ということですみません。


安定版を使ってのアプリ作成などは、後日記載予定です。