expressで開発したWebアプリをeXcaleで動かす
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を開始しています。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- Socket.IOを使ってNode.jsでリアルタイムWebアプリを開発する
- Node.jsとExpress.jsで開発したWebアプリをeXcaleで動かす
- Raspberry PiとNode.jsで作る独立稼働モバイルサーバ
- HTTPリクエストを簡単に!npm requestを使う方法【初心者向け】
- CloudサービスとRPAの連携
- Alexa Skills Kit SDK for Node.jsについて知る
- Fabric SDK(Software Development Kit)を用いてNode.jsからchaincodeを呼び出す
- チャットアプリとRPAとの連携
- 生まれ変わったJavaScript/ECMAScript
- テストコードを書いて「GitHub Actions」でCIを実行してみよう