gist

2012年1月12日木曜日

Nodeでexpressを試す

Expressは、Node界隈で人気のWebアプリケーションフレームワークです。早速試してみます。

Expressをインストールします。

$ sudo npm install -g express
Password:
/usr/local/bin/express -> /usr/local/lib/node_modules/express/bin/express
express@2.5.5 /usr/local/lib/node_modules/express 
├── mkdirp@0.0.7
├── mime@1.2.4
├── qs@0.4.0
└── connect@1.8.5

アプリのひな形を生成します。

$ express example

   create : example
   create : example/package.json
   create : example/app.js
   create : example/public
   create : example/routes
   create : example/routes/index.js
   create : example/views
   create : example/views/layout.jade
   create : example/views/index.jade
   create : example/public/javascripts
   create : example/public/images
   create : example/public/stylesheets
   create : example/public/stylesheets/style.css

   dont forget to install dependencies:
   $ cd example && npm install

メッセージに従ってコマンドを実行します。

$ cd example/
$ npm install
express@2.5.5 ./node_modules/express 
├── mkdirp@0.0.7
├── mime@1.2.4
├── qs@0.4.0
└── connect@1.8.5
jade@0.20.0 ./node_modules/jade 
├── mkdirp@0.2.2
└── commander@0.2.1

早速起動してみます。

$ node app.js 
Express server listening on port 3000 in development mode

ブラウザで http://127.0.0.0:3000/ にアクセスしてみます。

Nodeを止めるにはターミナルで Control+C を押します。

生成したひな形の中身を見てみましょう。

  • app.js ... アプリケーションのメインルーチンです。このファイルをnode起動時に指定します。
  • node_modules/ ... Nodeのモジュールが入っています。
  • package.json ... モジュールの依存関係を示すファイルです。
  • public/ ... スタティックにアクセスするファイルが入っています。スタイルシート、JavaScript、Imageなど。
  • routes/ ... ルーティングを示すJavaScriptファイルが入っています。
  • views/ ... Viewに関連するファイルが入っています。ここではExpressのデフォルトのテンプレートJade形式のファイルが入っています。

基本的な流れです。ブラウザから http://127.0.0.1:3000/ アクセスすると、app.js の以下のイベントハンドラが呼ばれます。

app.js

app.get('/', routes.index);

app.get(アクセスされたURL, 起動する関数)となります。この関数は、routesディレクトリのindex.jsに定義されています。

routes/index.js

exports.index = function(req, res){
  res.render('index', { title: 'Express' })
};

reqはリクエスト、resはレスポンスです。res.render でViewをレンダリングして返します。res.render(テンプレート名, テンプレートに与えるオブジェクト) となります。ここでは、indexというテンプレートに対して、プロパティtitleに文字列Expressを設定したオブジェクトを与え、レンダリングします。

renderメソッド内では、viewsディレクトリ内のindex.jade をレンダリングします。index.jadeはJadeテンプレートと呼びます。

h1= title
p Welcome to #{title}

h1= title は <h1>Express</h1> に展開されます。renderメソッドで与えたオブジェクトのtitleプロパティの値が h1 に設定されます。

p Welcome to #{title} は、<p>Welcom to Express</p> に展開されます。#{title} もrenderメソッドで与えたオブジェクトのtitleプロパティの値となります。

ここには書いていないhtmlタグやheadタグ、bodyタグは views/layout.jade に書かれています。index.jade は layout.jadeの body に与えられた部品です。Expressには一部分を全体に統合する機能が備わっています。パーシャル機能とか言います。

これでブラウザに以下のようなHTMLが返ります。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Express
</title>
<link rel="stylesheet" href="/stylesheets/style.css"/>
</head><body>
<h1>Express</h1>
<p>Welcome to Express</p>
</body>
</html>

これでようやくブラウザに表示されます。

作り方としては、どこからでも良いかと思いますが、私はviews内にjadeテンプレ作成→routes/index.jsにルーティングを追加 → app.jsにルーティング設定の順でやることが多いです。

0 件のコメント: