Node.jsに入門した

Node.jsとExpress

Windows8環境にNode.jsをインストールしてExpressを利用

Node.js

インストール

http://nodejs.org/

Node.jsのページから[INSTALL]をクリックしてWindows用msiをダウンロードした。今回は、

node-v0.10.28-x64.msi

をダウンロードした。

nodejs

インストーラの案内通りにインストールすると、

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-hello-world

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を実行すると

hello-module

上の画像のように実行される。

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の入門というテーマで幅広く書くことができた。

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Node.jsに入門したの記事にコメントを投稿