PR

expressで開発したWebアプリをeXcaleで動かす

2013年1月30日(水)
西谷 圭介

app.jsの中身

作成されたapp.jsの中身を見ていきます。大まかに言うと、上から順に各種モジュールのロード、アプリケーション設定、ルーティング、サーバ作成となっています。

まず、expressモジュールをロードし、続いてroutes/index.js、routes/user.jsをロードしています。jsという拡張子およびindexは省略可能なので、前者は簡単にroutesとだけ記述されています。

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');

続いてexpress()メソッド実行後、appに対して各種設定が行われています。portに3000を指定し、viewのファイルはviews以下、静的ファイルがpublic以下に置かれるという設定とともに、利用するミドルウェアが指定されています。

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});

その後のルーティングでは、HTTPメソッドと同様のメソッドであるget, post, put, delメソッドを用いて、リクエストを受け付けるURLと実際の処理を紐付けていきます。

第1引数にリクエストを受け付けるパス、第2引数でイベントハンドラを紐付けます。今回の例では"/"と"/users"へのGETリクエストをroutes/以下にあるファイルで定義された各イベントハンドラにそれぞれ紐付けています。

app.get('/', routes.index);
app.get('/users', user.list);

routes以下にあるファイルでは実際のイベントハンドラが記述されています。試しに/usersにリクエストした際に指定されているuser.listを見ていきます。

app.jsの最初にモジュールをロードしている箇所でuserとしてrequire('./routes/user')をロードしているので、user.listはrequire('./routes/user').listと同義です。require('./routes/user')では./routes/user.jsが読み込まれます。以下はUser.jsの内容です。

exports.list = function(req, res){
  res.send("respond with a resource");
};

このようにuser.js内部で実際の処理を定義した関数をlistという名前でexportsしています。従って、user.listはuser.js内でlistとしてexportsされている関数となります。

app.jsの最後ではHTTPサーバオブジェクトを作成して、先にセットしたポート番号でListenを開始しています。

TIS株式会社

TIS株式会社所属。金融系基幹システムの開発等に従事したのち、サービス企画・開発を担当。IaaS開発を経て、現在はアプリ開発者のためのPaaS「eXcale」の開発責任者兼プログラマとして活動中。
Twitter:@Keisuke69
eXcale:http://www.excale.net/

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています