2013-03-20 4 views

risposta

18

non è possibile così com'è, ma si potrebbe inserire una molto semplice middleware che sarebbero, per esempio, in minuscolo tutte le chiavi 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

Grazie! Provenendo da IIS, questo sembra strano che tale requisito di base sia trascurato. – SamSerious

+0

Forse nel mondo IIS, l'uso dei parametri di query con il caso mix è più comune che altrove :) Ho sempre usato i parametri minuscoli. – robertklep

+2

cosa succede se un utente digita parametri di query con casi misti? :) – SamSerious

1

Con la soluzione proposta da Robert, essere consapevoli del fatto che ogni volta che Si letto da req.query, sarà necessario utilizzare le chiavi minuscole. Questo rende le future aggiunte al tuo errore API incline.

Ecco un pezzo alternativo di middleware, utilizzando un Proxy object per modificare il comportamento di req.query[...], in modo che le ricerche sono case insensitive:

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

Oltre ad essere meno soggetto ad errori, questo approccio lascia anche il req.query intatta per operazioni di enumerazione, in cui la soluzione originale potrebbe potenzialmente creare coppie chiave/valore duplicate.

Problemi correlati