implementiert ich eine sehr einfache Middleware, die Berechtigungen für den Benutzer zu überprüfen:NodeJS Express: Wie unterbricht man das Routing von außerhalb der Middleware/Router?
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;
}
...
Der beste Weg, ich gefunden, um den Fluss zu unterbrechen, ist der folgende:
Routen/mycontroller.js
router.get('/', function(req, res, next) {
if(security.adminRequiredHtml()){return;} // now it actually interrupt the execution
res.render('admin',{});
res.end();
});
aber ich möchte es so verwenden:
Routen/mycontroller.js
router.get('/', function(req, res, next) {
security.adminRequiredHtml(); // <- interrupt the request
res.render('admin',{});
res.end();
});
Es die Umleitung richtig auszuführen, aber die Ausführung geht weiter :(
Ich habe ein paar Lösungen versucht, aber es funktioniert nicht wirklich:
response.end()
-> die Ausgabe schließen aber setzt die Ausführung
process.end()
-> es ist zu radikal, beendet die Ausführung, aber es tötet auch den Server :(
Ich habe eine throw
über die Verwendung nachgedacht, aber ich weiß nicht, wo es zu fangen und es anmutig zu beenden (kein Stacktrace)
es ist unelegant und kann zu Verwirrung (und folglich zu einer Sicherheitsstrom) aufgrund der führen Tatsache, dass das Ergebnis auf dem Browser korrekt ist, aber die Ausführung fortgesetzt. – Cesar