Express web framework (Node.js/JavaScript)の勉強 part2
Creating route handlersを読みすすめる
前回、特定のパスへのリクエストを受け取り、対応するコールバック関数を実行する方法を学んだ。 今回は express.Router についてを学ぶ
Router
express.Router
を使うことで、特定のパスへのリクエストをまとめて扱うことが可能になる。
ここの例では http://localhost:3000/wiki/
以下へのリクエストを解釈するrouterインスタンスを作成している。
具体例として以下に wiki.js
というファイルを示す
wiki.js
// wiki.js - Wiki route module const express = require('express'); const router = express.Router(); // Home page route router.get('/', function(req, res) { res.send('Wiki home page'); }); // About page route router.get('/about', function(req, res) { res.send('About this wiki'); }); module.exports = router;
4行目 const router = express.Router()
express.Router を使うことでモジュール化されたのマウント可能なルートハンドラを作成できる。
別ファイルで特定のパス(今回は /wiki
プレフィックスとする)を指定することで、そのパスへ以下へのリクエストをルーティングするとが可能になる。
7〜9行目 router.get('/', function(req, res){ ...以下略
特定のパス以下の /
へのリクエストを第二引数の関数へルーティングする
今回の例では/wiki
へのリクエストをルーティングする
12〜14行目 router.get('/about', function(req, res){ ...以下略
特定のパス以下の /about
へのリクエストを第二引数の関数へルーティングする
今回の例では/wiki/about
へのリクエストをルーティングする
16行目 module.exports = router;
ここまでで作成したrouterオブジェクトを別ファイルで使用できるようにエクスポートする
app.js
const express = require('express'); const app = express(); const port = 3000; const wiki = require('./wiki.js'); app.get('/', (req, res) => { res.send('Hello World!') }); app.listen(port, () => { console.log(`Example app listening on port ${port}!`) }); app.use('/wiki', wiki);
5行目 const wiki = rquire('./wiki.js');
nodejsはCommonJSのモジュールシステムを採用している。
* 参考:What is require? | Node.js
CommonJSではrequireを使うことでモジュールを取り込む。
requireはモジュールの名前もしくはパスを引数にとる。
15行目 app.use('/wiki', wiki);
app
は関数以外にも、特定のミドルウェアの機能を特定のパスに関連付けることができる。
今回の例ではパス/wiki
とオブジェクトwiki
が、それぞれapp.use
の第一、第二引数に使われている。
/wiki/about
への要求はwiki
オブジェクトへ渡り、/wiki/about
からプレフィックス/wiki
を除いたパス/about
を使いwiki
オブジェクト内でマッチングが行われる。
結果wiki.js
の12行目で定義されたパスにマッチし、対応する関数が実行される。
まとめ
- routerは別ファイルにまとめることで、特定のパス以下の処理を分割することができる