2013-03-20 20 views

Antwort

18

Es ist nicht möglich, wie sie ist, aber man konnte eine sehr einfache Middleware einsetzen, die würde zum Beispiel Klein alle Schlüssel in req.query:

// insert this before your routes 
app.use(function(req, res, next) { 
    for (var key in req.query) 
    { 
    req.query[key.toLowerCase()] = req.query[key]; 
    } 
    next(); 
}); 
+1

Danke! Wenn man aus dem IIS kommt, fühlt sich das komisch an, dass eine solche Grundvoraussetzung übersehen wird. – SamSerious

+0

Vielleicht in der IIS-Welt, die Verwendung von Abfrage-Parameter mit Mixen Fall häufiger als anderswo :) Ich habe immer Kleinbuchstaben Parameter selbst verwendet. – robertklep

+2

Was ist, wenn ein Benutzer Abfrageparameter mit gemischten Fällen eingibt? :) – SamSerious

1

Mit der Lösung von Robert vorgeschlagen, sich bewusst sein, dass, wann immer Sie lesen von req.query, müssen Sie Lowcased-Schlüssel verwenden. Dies macht zukünftige Ergänzungen zu Ihrem API-Fehler anfällig. Hier

ist eine Alternative Stück Middleware, ein Proxy object mit dem Verhalten von req.query[...], so zu modifizieren, dass Lookups Fall ist unempfindlich:

app.use((req, res, next) => { 
    req.query = new Proxy(req.query, { 
    get: (target, name) => target[Object.keys(target) 
     .find(key => key.toLowerCase() === name.toLowerCase())] 
    }) 

    next(); 
}); 

Neben weniger fehleranfällig zu sein, ist dieser Ansatz auch die Blätter req.query intakt Aufzählungsoperationen, bei denen die ursprüngliche Lösung möglicherweise doppelte Schlüssel/Wert-Paare erstellt.