Sie können einen Routenparameter mit einem konstanten Satz von Werten verwenden.
Express verwendet path-to-regexp
, um die Strings zu analysieren, die Sie für Routen bereitstellen. Dieses Paket permits providing a custom pattern mit einem Parameter zur Begrenzung der Werte, die abgestimmt werden können.
app.get('/shops/:kind(list|map)/search', searchShops);
Der Inhalt der Klammern, (...)
, sind ein Teil RegExp Muster, in diesem Fall entspricht:
/(?:list|map)/
# within a non-capturing group, match an alternative of either "list" or "map" literally
dann innerhalb von searchShops
, können Sie bestimmen, welcher Wert mit req.params
gegeben wurde:
function searchShops(req, res) {
console.log(req.params.kind); // 'list' or 'map'
// ...
}
Alternativ können Sie le ave den Parameter offen, den Wert innerhalb des Handler überprüft, und next('route')
aufrufen, wenn der Wert nicht akzeptabel ist:
app.get('/shops/:kind/search', searchShops);
var searchKinds = ['list', 'map'];
function searchShops(req, res, next) {
if (!searchKinds.includes(req.params.kind)) return next('route');
// ...
}
Im Allgemeinen [Routenparameter] (http://expressjs.com/en/guide/routing.html#route-parameters) für das verwendet werden. Haben Sie einen relevanten Code, den Sie teilen können? –
Ich verwende Routenparameter, wenn ich beispielsweise per ID auf eine Entität zugreifen möchte. In meinem Fall muss ich jedoch nur wissen, ob das zweite Segment eine Karte oder Liste ist. Sie sind beide fest codiert. Ist meine Frage jetzt klarer? – Codearts
Besser, aber nicht vollständig. Wenn sie fest codierte Konstanten sind, gibt es einen Grund, warum der Routen-Handler die gleiche Konstante nicht kennen kann? Verwenden Sie einen einzelnen Handler für beide Routen erneut? –