2017-04-02 4 views
0

Also lassen Sie uns sagen, wir haben die folgende URL zugreifen:Wie URL-Segment (e) in Express.js

http://example.com/shops/map/search 

ich das zweite Segment (Karte) zugreifen möchten, und seinen Wert überprüfen. Wie kann ich dies in Express erreichen? Danke im Voraus!

+0

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? –

+0

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

+0

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? –

Antwort

2

Sie können auf die URL-Segmente zugreifen, indem Sie die URL in ein Array aufteilen. So:

let requestSegments = req.path.split('/'); 
1

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'); 

    // ... 
} 
3

Sie haben Ihre ausdrückliche Routen konfigurieren url Segmente zu akzeptieren.

app.get('/shops/:type/search', function (req, res) { 
    res.send(req.params) 
}) 

Für eine Anfrage ähnlichen http://example.com/shops/map/search

req.params wird URL-Segment enthält erforderlich.