app.jsの中身

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を開始しています。

この記事のキーワード :

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30