回答編集履歴

1

おまけ追加

2017/12/20 06:27

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -83,3 +83,117 @@
83
83
  });
84
84
 
85
85
  ```
86
+
87
+
88
+
89
+ ---
90
+
91
+
92
+
93
+ 【おまけ】なんとか同じサーバで上手く共用させられないか
94
+
95
+
96
+
97
+ エンドポイントで縛る方法があります。
98
+
99
+ middlewareがぴったりなので、辛いでしょうが解説しますので頑張って読んでください。
100
+
101
+ [app.use([path,] callback [, callback...])](http://expressjs.com/ja/api.html#app.use)
102
+
103
+
104
+
105
+ Expressに於けるミドルウェアは、`req, res, next`の順番で引数を要求する関数を指します。
106
+
107
+
108
+
109
+ ```JavaScript
110
+
111
+ var express = require('express');
112
+
113
+ var app = express();
114
+
115
+ app.use(function (req, res, next) {
116
+
117
+ // リクエストのパスが一致しなかったら勝手に400番エラー返すようにしよう
118
+
119
+ if (req.params.pass === 'my_password') {
120
+
121
+ // 認証出来たリクエストは次へ
122
+
123
+ next();
124
+
125
+ } else {
126
+
127
+ // 認証失敗したリクエストは400エラー返して殺す
128
+
129
+ res.status(499).end('リクエストは失敗です。');
130
+
131
+ // nextを実行しなければ自動的にそこで止まる
132
+
133
+ }
134
+
135
+ });
136
+
137
+ ```
138
+
139
+
140
+
141
+ これをかっこよく別ファイルに移動するとmiddlewareになります。
142
+
143
+
144
+
145
+ ```JavaScript
146
+
147
+ // app.js
148
+
149
+ var express = require('express');
150
+
151
+ var my_auth = require('./my_auth.js');
152
+
153
+ var app = express();
154
+
155
+ app.use(my_auth);
156
+
157
+
158
+
159
+ // my_auth.js
160
+
161
+ module.exports = function (req, res, next) {
162
+
163
+ if (req.params.pass === 'my_password') {
164
+
165
+ next();
166
+
167
+ } else {
168
+
169
+ res.status(499).end('リクエストは失敗です。');
170
+
171
+ }
172
+
173
+ }
174
+
175
+ ```
176
+
177
+
178
+
179
+ 次、app.useは第一引数に文字列を設定出来ます。
180
+
181
+ admin配下にだけ適用したければ下記のように記載すれば済むでしょう。
182
+
183
+
184
+
185
+ ```JavaScript
186
+
187
+ app.use('/admin(/*)?', my_auth);
188
+
189
+ ```
190
+
191
+
192
+
193
+ このようにadmin配下は認証機能を仕込んでおけば、publicディレクトリ配下にadmin/index.jsみたいなファイルが設置してあっても認証が必要になりそうです。
194
+
195
+
196
+
197
+ useは上に指定した順番で適用されていくので、
198
+
199
+ `express.static`より前に書けば認証で守れたかと思います(未確認なので検証してみてください)