2013-03-20 15 views

Odpowiedz

18

To nie jest możliwe, jak jest, ale można wstawić bardzo proste oprogramowanie pośredniczące, które, na przykład, małe wszystkie klucze w 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

Dzięki! Począwszy od IIS, wydaje się dziwne, że takie podstawowe wymagania są pomijane. – SamSerious

+0

Być może w świecie IIS używanie parametrów zapytania z przypadkami mieszania jest bardziej powszechne niż gdzie indziej :) Zawsze stosowałem same małe litery. – robertklep

+2

Co się stanie, jeśli użytkownik wpisze parametry zapytania w przypadki mieszane? :) – SamSerious

1

Dzięki rozwiązaniu proponowanym przez Roberta, należy pamiętać, że ilekroć ty przeczytać z req.query, będziesz musiał użyć klawiszy pisanych małymi literami. To sprawia, że ​​przyszłe dodatki do błędów API są podatne na błędy.

Oto alternatywa kawałek middleware, używając Proxy object zmodyfikować zachowanie req.query[...], tak że wyszukiwania są wrażliwe na wielkość liter:

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(); 
}); 

Poza tym jest mniej podatny na błędy, takie podejście pozostawia również req.query nienaruszone wyliczanie operacji, w których oryginalne rozwiązanie potencjalnie tworzyłoby duplikaty par klucz/wartość.

Powiązane problemy