Ich verwende das Express-Framework in node.js mit einigen Middleware-Funktionen:
var app = express.createServer(options);
app.use(User.checkUser);
Ich kann das benutzen .use
Funktion mit einem zusätzlichen Parameter verwenden, um diese Middleware nur auf bestimmten Pfaden zu verwenden:
app.use('/userdata', User.checkUser);
Ist es möglich, die Pfadvariable so zu verwenden, dass die Middleware für alle Pfade außer einem bestimmten verwendet wird, dh für den Stammpfad?
Ich denke über so etwas nach:
app.use('!/', User.checkUser);
Wird User.checkUser
also bis auf den Root-Pfad immer aufgerufen.
node.js
routes
express
middleware
Thomas
quelle
quelle
Anstatt sich direkt
User.checkUser
als Middleware zu registrieren, registrieren Sie beispielsweise eine neuecheckUserFilter
Hilfsfunktion, die für jede URL aufgerufen wird, die Ausführung jedoch nur für bestimmte URLs an userFiled übergeben wird. Beispiel:var checkUserFilter = function(req, res, next) { if(req._parsedUrl.pathname === '/') { next(); } else { User.checkUser(req, res, next); } } app.use(checkUserFilter);
Theoretisch könnten Sie reguläre Ausdruckspfade zu bereitstellen
app.use
. Zum Beispiel so etwas wie:app.use(/^\/.+$/, checkUser);
Versuchte es auf Express 3.0.0rc5, aber es funktioniert nicht.
Vielleicht könnten wir ein neues Ticket eröffnen und dies als Feature vorschlagen?
quelle
Sie können die Middleware auch auf jeder Route einstellen.
// create application/x-www-form-urlencoded parser var urlencodedParser = bodyParser.urlencoded({ extended: false }) // POST /login gets urlencoded bodies app.post('/login', urlencodedParser, function (req, res) { if (!req.body) return res.sendStatus(400) res.send('welcome, ' + req.body.username) })
quelle
Verwenden
app.use(/^(\/.+|(?!\/).*)$/, function(req, resp, next){...
Dies übergibt jede URL außer /. Es sei denn, es funktioniert bei mir.
Im Allgemeinen
(Siehe Wie man ein bestimmtes Wort in Regex negiert? )
Hoffe das hilft
quelle
Verwenden Sie diese Bibliothek namens Express - es sei denn
Für jede Anforderung ist eine Authentifizierung erforderlich, es sei denn, der Pfad lautet index.html.
app.use(requiresAuth.unless({ path: [ '/index.html', { url: '/', methods: ['GET', 'PUT'] } ] }))
Pfad kann eine Zeichenfolge, ein regulärer Ausdruck oder ein Array von diesen sein. Es kann sich auch um ein Array von Objekten handeln, bei denen es sich um URL- und Methodenschlüsselpaare handelt. Wenn der Anforderungspfad oder der Pfad und die Methode übereinstimmen, wird die Middleware nicht ausgeführt.
Diese Bibliothek wird Ihnen sicherlich helfen.
quelle