回答編集履歴

2

加筆(追記部分

2020/02/18 21:53

投稿

AkitoshiManabe
AkitoshiManabe

スコア5432

test CHANGED
@@ -76,11 +76,13 @@
76
76
 
77
77
  1. L136: proto.handle() が実行され、この中で req.mehod による切り分けが行われています。
78
78
 
79
- 2. この関数内(L243 付近)の route._handles_method(method) が怪しい。
79
+ 2. この関数内(L243 付近)の route._handles_method(method) が怪しい。
80
80
 
81
81
 
82
82
 
83
- ``router.get()``、``router.post()`` 等は **条件付き use() メソッド** と考えて差し支えないと思います。
83
+ ``router.get()``、``router.post()`` 等は **条件付き use() メソッド** と考えて差し支えないと思います。端的に言えば、ミドルウェア登録用ユーティリティ関数ですので、実行できないと機能しないということになります(route.js L192 で実装している様子です)。
84
+
85
+
84
86
 
85
87
  1. 要求された HTTP_METHOD
86
88
 

1

追記

2020/02/18 21:52

投稿

AkitoshiManabe
AkitoshiManabe

スコア5432

test CHANGED
@@ -63,3 +63,55 @@
63
63
  };
64
64
 
65
65
  ```
66
+
67
+
68
+
69
+ 追記)コメントを受けて
70
+
71
+
72
+
73
+ ソース(express v4.17.1)を軽く追いかけてみました。
74
+
75
+
76
+
77
+ 1. L136: proto.handle() が実行され、この中で req.mehod による切り分けが行われています。
78
+
79
+ 2. この関数内(L243 行付近)の route._handles_method(method) が怪しい。
80
+
81
+
82
+
83
+ ``router.get()``、``router.post()`` 等は **条件付き use() メソッド** と考えて差し支えないと思います。
84
+
85
+ 1. 要求された HTTP_METHOD
86
+
87
+ 2. 要求された PATH
88
+
89
+ に合致するミドルウェア登録用配列が小分けに管理します。
90
+
91
+
92
+
93
+ router.handle() によって、管理されていたミドルウェア群の条件にあったものを選ぶ仕組みのようです。
94
+
95
+
96
+
97
+ 詳細まで追いかけてませんが、イメージはこう。
98
+
99
+ ```
100
+
101
+ [
102
+
103
+ {method:"GET", path:"/hoga", middlewares:[/* middlewares A *./] },
104
+
105
+ :
106
+
107
+ {method:"GET", path:"/hogu", middlewares:[/* middlewares U *./] },
108
+
109
+ :
110
+
111
+ {method:"GET", path:"/hogz", middlewares:[/* middlewares Z *./] }
112
+
113
+ ]
114
+
115
+ ```
116
+
117
+ (/hogu に対して、GET要求されると、 ``[/* middlewares U *./]`` が ``use()`` されていたものとして実行するイメージ)