teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

誤りを修正

2019/05/26 02:10

投稿

mottox2
mottox2

スコア299

answer CHANGED
@@ -1,6 +1,19 @@
1
- このコードですと、最初に`/`か/`root`に一致するか判定をしており、`/root/hoge`にアクセスすると`/root`に一致していると判定されています。
2
- かしたら`h`に定義したRouter有効になると思われているかもしれませんがhoge()内容が実行されておらずrouterが定義時のままなの、`/root`として判されたは空のルーターが有効になっているように見えます。
1
+ う一回手元で動かししたが、質問コードconsole.logを埋め込んでみたところapp.useで/rootにhを設するにからのルーターになっています。
2
+ これは`hoge`が実行されていないためです。
3
+ app.useで設定しているrouter、登録時のものが設定されるため、先にRouterを設定しておくといいでしょう。
3
4
 
5
+ ```js
6
+ let h = express.Router();
7
+ app.use('/', (req, res, next) => {
8
+ h = hoge()
9
+ next()
10
+ });
11
+
12
+ console.log(h)
13
+
14
+ app.use('/root', h)
15
+ ```
16
+
4
17
  ですので`/`と`/root`で同じRooterを利用したいのであれば、次のようなコードにしてみてはどうでしょうか?
5
18
  便宜上appとの関係性がわかりやすいように1つのファイルとして書いています。
6
19