回答編集履歴

2

ver.6 修正版コードへのリンク追加

2020/03/22 13:32

投稿

Bouya
Bouya

スコア13

test CHANGED
@@ -15,6 +15,10 @@
15
15
 
16
16
 
17
17
  また、[express-varidator公式サイト](https://express-validator.github.io/docs/)の説明に従いコードを修正すると最新バージョンでも動かす事が出来たので、勉強も兼ねてそちらも試してみるのもオススメです。
18
+
19
+ 個人的に作成していた修正版のコードはQiitaで公開していますので、よければ参考にしてください。
20
+
21
+ [『Node.js 超入門』の express-validation を最新の仕様に修正する](https://qiita.com/Bouya12/items/7946226f4609b40cec6a)
18
22
 
19
23
 
20
24
 

1

回答の追記

2020/03/22 13:32

投稿

Bouya
Bouya

スコア13

test CHANGED
@@ -15,3 +15,79 @@
15
15
 
16
16
 
17
17
  また、[express-varidator公式サイト](https://express-validator.github.io/docs/)の説明に従いコードを修正すると最新バージョンでも動かす事が出来たので、勉強も兼ねてそちらも試してみるのもオススメです。
18
+
19
+
20
+
21
+ ---
22
+
23
+
24
+
25
+ **追記**
26
+
27
+
28
+
29
+ すみません、質問で書かれている package.json の内容を確認したらバージョンは5.3なので別の原因かもしれないです。
30
+
31
+ app.js の記述箇所に問題があるのではないでしょうか?モジュール利用時の文を追記する位置について、P.253 にて以下のような説明があります。
32
+
33
+
34
+
35
+ > Expressでは、さまざまなモジュールをロードして使いますが、こうしたモジュールをapp.useで利用するための文は、「routes」フォルダのスクリプトをルーティングに割り付けるためのapp.useより前に用意するように注意して下さい。
36
+
37
+
38
+
39
+ 質問に記載されているapp.jsでは以下のように`app.use(validator());`がルーティングの後に記載されています。
40
+
41
+
42
+
43
+ ```
44
+
45
+ app.use('/', indexRouter);
46
+
47
+ app.use('/users', usersRouter);
48
+
49
+ app.use('/hello', hello);
50
+
51
+ app.use(validator()); 
52
+
53
+ ```
54
+
55
+
56
+
57
+ この文から、`app.use(validator());`をルーティング処理の前(`app.use('/', indexRouter);`より上)に記載するように修正することで問題が解決するかと思います。
58
+
59
+ なお、書籍のサンプルコードではapp.jsは下記のように順序で記載されていましたので、こちらも参考にして下さい。
60
+
61
+
62
+
63
+ ```
64
+
65
+ // validator
66
+
67
+ var validator = require('express-validator');
68
+
69
+ app.use(validator());
70
+
71
+
72
+
73
+
74
+
75
+ app.use('/', indexRouter);
76
+
77
+ app.use('/users', usersRouter);
78
+
79
+
80
+
81
+ // add hello.
82
+
83
+ var hello = require('./routes/hello');
84
+
85
+ app.use('/hello', hello);
86
+
87
+
88
+
89
+ var ajax = require('./routes/ajax');
90
+
91
+ app.use('/ajax', ajax);
92
+
93
+ ```