Node.jsとExpress
Windows8環境にNode.jsをインストールしてExpressを利用
Node.js
インストール
Node.jsのページから[INSTALL]をクリックしてWindows用msiをダウンロードした。今回は、
node-v0.10.28-x64.msi
をダウンロードした。
インストーラの案内通りにインストールすると、
C:\Program Files\nodejs
にセットアップされる。
コマンドプロンプト起動
下のコマンドを入力して、nodeのバージョン番号が返ってくればnodeは正常にインストールされている。
C:\Users\Administrator>node -v v0.10.28
Hello World
Hello Worldっぽいコードを試してみる。Windowsのデスクトップに
test.js
というファイル名で
console.log('Web Engineer Blog');
上のコードを書いて保存する。
コマンドプロンプトでデスクトップに移動し、
node test.js
で実行する。実行結果は以下の画像
Node moduleを作成
簡単なnodeモジュールを作成してみる。Node.jsの入門段階ではモジュールを作る機会は無いだろうが、モジュールの開発を試しておくことは重要。Expressもnodeのモジュール一つで利用するためには下のようにする。
var express = require('express');
モジュールの利用の仕方が分かったので、hello.jsで自作モジュールを試してみる。
var w = require('./world.js'); console.log(w.name); console.log(w.get_name());
world.jsというモジュールをrequireしてhello.jsで利用している。world.jsは以下のようにした。
var name = exports.name = 'Web Engineer Blog'; exports.get_name = function() { return name + ' Module'; }
コードを作成して、hello.jsを実行すると
上の画像のように実行される。
nodeの
- インストール
- 実行
- モジュールの作成
までを行った。次にExpressに入門する。
Express
インストール
Cドライブの下にExpressというフォルダを作成し、その中でExpressアプリを試す。
C:\>mkdir Express
C:\>cd express
C:\Express>npm install express
ExpressをインストールするとExpressフォルダ内に、
node_modules
というディレクトリが作成される。
Hello Express
Expressフォルダの中に
hello.js
というファイル名で下のコードを作成する。
var http = require('http'); var express = require('express'); var app = express(); app.get('/', function(req, res) { res.send('Web Engineer Blog Express Sample'); }); http.createServer(app).listen(3000, function(){ console.log("Express server started"); });
作成したら、
C:\Express>node hello.js
コマンドプロンプトでhello.jsを実行する。
Express server started
と表示されれば、nodeのwebサーバが起動されるので、ブラウザから
localhost:3000/
にアクセスし、
Web Engineer Blog Express Sample
が表示されることを確認する。
ルーティングの分離
上に載せたExpressのコードからルーティング部分のコードを分離してみる。モジュールとしてルーティング処理を定義することが可能。
module.exports = function(app) { app.get('/', function(req, res) { res.send('Web Engineer Blog Express Sample'); }); app.get('/log', function(req, res) { console.log(req.ip + ' ' + req.url); res.send(req.ip + ' ' + req.url); }); };
モジュール化すると同時に、/logというルーティング設定を追加した。そして、hell.jsを下のように変更する。
var http = require('http'); var express = require('express'); var app = express(); var router = require('./router')(app); http.createServer(app).listen(3000, function(){ console.log("Express server started"); });
Webサーバを再起動すると、/logにもアクセスすることが可能になる。
リクエストオブジェクト
/logでは、リクエストオブジェクトの
- req.ip
- req.url
というプロパティ値を取得して、画面とコンソール上に表示している。その他のリクエストオブジェクトは、Expressのサイトで確認することができる。
http://expressjs.com/4x/api.html#req.params
Express manifest file
マニフェストファイルを利用してモジュールの依存関係を自動で管理することが出来る。Cドライブの下に新規に
Express-manifest
というフォルダを作成して、その中にExpressアプリを作成する。
フォルダを作成したマニフェストファイルを作成する。package.jsonというファイル名で、下のコードを書いておく。
{ "name": "WebEngineerBlogSampleApp", "version": "0.0.1", "private": true, "scripts": { "start": "node app" }, "dependencies": { "express": "4.4.2", "jade": "*" } }
マニフェストファイルを作成したら、コマンドプロンプトで、
npm install
を実行する。
Expressとテンプレートエンジンのjadeの依存関係が解決された状態でインストールされる。
jade
jadeが利用可能な状態になったので、テンプレートファイルの格納フォルダとして
viewsフォルダ
を作成する。
C:\Express-manifest\views
という階層構造にして、views内に
- index.jade
- log.jade
という2つのテンプレートファイルを作成する。
index.jade
html head title Web Engineer Blog Express Sample body Web Engineer Blog Express Sample
log.jade
html head title log body h1 #{ip} b #{url}
テンプレートを作成した。log.jadeについては、アプリ本体から
- ip
- url
という変数名でデータを参照可能な状態にしてみた。アプリ本体のコードは下のようにした。
var http = require('http'); var express = require('express'); var app = express(); // テンプレートエンジンの設定 app.set('view engine', 'jade'); app.set('views', './views'); app.get('/', function(req, res) { // index.jadeをレンダリング res.render('index'); }); app.get('/log', function(req, res) { // 引数を渡してlog.jadeをレンダリング res.render('log', {ip:req.ip, url:req.url}); }); http.createServer(app).listen(3000, function(){ console.log("Express server started"); });
jadeを利用したExpressコードのサンプルが上のコード。
ルートの場合(/)は、純粋にindex.jadeを表示している。/logの場合は、リクエストオブジェクトをテンプレート側で利用可能にするため、renderメソッドの2番目の引数として、ipとurlを設定しテンプレート側で利用可能な状態にしてある。
まとめ
Node.jsの簡単な使い方から、モジュールの作成。そして、Expressについては、ルーティング処理を分離して実行したり、リクエストオブジェクトの利用方法、マニフェストファイルによるモジュールの依存関係管理、jadeテンプレートの使い方など・・ Node.jsの入門というテーマで幅広く書くことができた。