関数なのかオブジェクトなのかわかりません。
express 用のミドルウェア関数でしたよ。
express.js は、MITライセンス のミドルウェアフレームワークですので、コードを読むのが手っ取り早いです。
npm でインストールしたファイルは node_modules フォルダにあります。(NodeJS の モジュール管理方法は参照)
現在、ルーティングエンジン(Router)は express の標準実装なので、ファイルを特定して、ソースのmodule.exports を検索すると、モジュールが公開する場所を見つけることができます。
読まれる順番は、require() にも着目。
- /node_modules/express/index.js
- /node_modules/express/lib/express.js
var Router = require('./router'); が読める
3. /node_modules/express/lib/router/index.js <- これ
express v4.17.1の例では、 [/node_modules/express/lib/router/index.js]L:43 にありました。
javascript
1var proto = module.exports = function(options) {
2 var opts = options || {};
3
4 // express middleware function
5 function router(req, res, next) {
6 router.handle(req, res, next);
7 }
8
9 /* omitted */
10
11 return router;
12};
追記)コメントを受けて
ソース(express v4.17.1)を軽く追いかけてみました。
- L136: proto.handle() が実行され、この中で req.mehod による切り分けが行われています。
- この関数内(L243 付近)の route._handles_method(method) が怪しい。
router.get()
、router.post()
等は 条件付き use() メソッド と考えて差し支えないと思います。端的に言えば、ミドルウェア登録用ユーティリティ関数ですので、実行できないと機能しないということになります(route.js L192 で実装している様子です)。
- 要求された HTTP_METHOD
- 要求された PATH
に合致するミドルウェア登録用配列が小分けに管理します。
router.handle() によって、管理されていたミドルウェア群の条件にあったものを選ぶ仕組みのようです。
詳細まで追いかけてませんが、イメージはこう。
[
{method:"GET", path:"/hoga", middlewares:[/* middlewares A *./] },
:
{method:"GET", path:"/hogu", middlewares:[/* middlewares U *./] },
:
{method:"GET", path:"/hogz", middlewares:[/* middlewares Z *./] }
]
(/hogu に対して、GET要求されると、 [/* middlewares U *./]
が use()
されていたものとして実行するイメージ)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/18 19:06 編集
2020/02/18 21:43
2020/02/19 16:32