Wygląda na to, że w querystringu rozróżniana jest wielkość liter. Czy jest możliwe stosowanie kwerendy?nodejs (express) czy możliwe jest stosowanie kwerendy?
Jeśli mój adres URL ma ?Id=10
, dostęp do req.query.id
zwraca undefined
.
Wygląda na to, że w querystringu rozróżniana jest wielkość liter. Czy jest możliwe stosowanie kwerendy?nodejs (express) czy możliwe jest stosowanie kwerendy?
Jeśli mój adres URL ma ?Id=10
, dostęp do req.query.id
zwraca undefined
.
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();
});
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ść.
Dzięki! Począwszy od IIS, wydaje się dziwne, że takie podstawowe wymagania są pomijane. – SamSerious
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
Co się stanie, jeśli użytkownik wpisze parametry zapytania w przypadki mieszane? :) – SamSerious