2014-01-29 10 views
5

Ich habe zwei GET-Routen für Get-Stores, aber eine Route ist für alle Geschäfte und die andere Route ist für nur in der Nähe Geschäfte zu bekommen.Express-Routing GET mit Suchparametern

1) Die URL-Anforderung für alle Geschäfte ist wie folgt:

http://mydomain/stores 

2) Die URL für bekommen alle Geschäfte in der Nähe:

http://mydomain/stores?lat={lat}&lng={lng}&radius={radius} 

Die Frage ist:

Wie kann ich diese URLs ordnungsgemäß in Express zuordnen, um jede Route auf die entsprechende Methode umzuleiten?

app.get('/stores', store.getAll); 

app.get('/stores', store.getNear); 

Antwort

11
app.get('/stores', function(req, res, next){ 
    if(req.query['lat'] && req.query['lng'] && req.query['radius']){ 
    store.getNear(req, res, next); 
    } else { 
    store.getAll(req, res, next) 
    }; 
}); 

bearbeiten - ein zweiter Weg, es zu tun:

store.getNear = function(req, res, next){ 
    if(req.query['lat'] && req.query['lng'] && req.query['radius']){ 
    // do whatever it is you usually do in getNear 
    } else { // proceed to the next matching routing function 
    next() 
    }; 
} 
store.getAll = function(req, res, next){ 
    // do whatever you usually do in getAll 
} 

app.get('/stores', store.getNear, store.getAll) 
// equivalent: 
// app.get('/stores', store.getNear) 
// app.get('/stores', store.getAll) 
+0

beachten Sie, dass dies nicht gelingen wird, wenn lat/lng/Radius Null ist, da diese falsy ist; Wenn das ein Problem ist, kannst du explizit gegen 'undefined' testen. – Plato

+0

Meine Idee war es zu vermeiden, wenn, aber wenn es keinen anderen Weg gibt, ist es in Ordnung! – vitorvigano

+0

Ich postete einen alternativen Weg, aber warum sollten Sie erwarten, dass Sie verschiedene Funktionen für die gleiche Route ausführen können, abhängig von den Umständen ohne ein "if" irgendwo? – Plato