は、私は、ユーザーの権限をチェックするために非常に単純なミドルウェアを実装:NodeJS Express:ミドルウェア/ルータの外部からのルーティングを中断する方法は?
app.js
...
var security = require('./lib/security');
app.use(security.init);
...
のlib/security.js
var session;
var request;
var response;
function init(req, res, next) {
request = req;
response = res;
session = req.session;
next();
}
function adminRequired(){
if (!isAdmin()){
response.redirect('/login');
response.end();
return true;
}
return false;
}
...
最良の方法Iフローを中断することがわかりました:
ルート/ mycontroller.js
router.get('/', function(req, res, next) {
if(security.adminRequiredHtml()){return;} // now it actually interrupt the execution
res.render('admin',{});
res.end();
});
しかし、私はこのようにそれを使用したいと思います:
ルート/ mycontroller.js
router.get('/', function(req, res, next) {
security.adminRequiredHtml(); // <- interrupt the request
res.render('admin',{});
res.end();
});
それは正しくリダイレクトを実行、実行は続行されます:(
私はいくつかのソリューションを試しましたが、実際には機能しません。
response.end()
- >出力を閉じますが、実行
process.end()
を継続 - >それは、あまりにも過激だ実行を終了しますが、それはまた、サーバーを殺す:(
私はthrow
の使用について考えてきたが、私は知りませんどこにキャッチして正常に終了させるか(スタックトレースなし)
それが原因に洗練だと混乱につながる可能性があり(その結果、セキュリティフローへ)実際にはブラウザ上の結果は正しいが、実行は続けられた。 – Cesar