2012-05-17 12 views
12

È possibile utilizzare il sotto per ottenere la stringa di query.Come ottenere la stringa di query non analizzata da una richiesta http in Express

var query_string = request.query; 

Quello che mi serve è la stringa di query non analizzata non elaborata. Come ottengo quello? Per l'URL sotto la stringa di query è { tt: 'gg' }, ho bisogno tt=gg&hh=jj ecc ....

http://127.0.0.1:8065?tt=gg 

Server running at http://127.0.0.1:8065 
{ tt: 'gg' } 

risposta

24

È possibile utilizzare il modulo 's nodeURL come per esempio this:

require('url').parse(request.url).query 

esempio

node> require('url').parse('?tt=gg').query 
'tt=gg' 

o semplicemente andare direttamente all'URL e substr dopo la ?

var i = request.url.indexOf('?'); 
var query = request.url.substr(i+1); 

(che è quello che require('url').parse() fa sotto il cofano)

+0

Come ottengo il raw? request.query == {tt: 'gg'}. Voglio tt = gg. – Tampa

+1

Ecco cosa fa la risposta. Si potrebbe voler notare che 'query' di sopra non è' request.query'. Quest'ultimo è un membro aggiunto da espresso. –

+0

Non uso express. Devo essere leggero – Tampa

0

Se si vuole che sia che "leggero ", devi scriverlo da solo.

var raw = ""; 
for(key in query_string) 
    raw += key + "="+ query_string[key] "&"; 
if (raw.indexOf("&") > 0) // To remove the last & since it will produce 'tt=gg&' 
    raw = raw.substring(0,raw.length-1); 
+0

Non vedo come la ricostruzione della stringa di query da una versione analizzata sia leggera rispetto alla semplice stringa di url e 'substr' dopo il'? '. –

+0

@PeroPejovic Neanche io. Tampa afferma di aver analizzato la versione in query_string e di averne bisogno per la conversione in raw. Dal contesto, presumo che abbia solo la versione analizzata, non l'intero URL – Mustafa

4

È possibile utilizzare req.originalUrl in espresso 3.x +. (Versioni più vecchie possono utilizzare req.url dal modulo http del nodo). Questo dovrebbe produrre la stringa di prima, escludendo il ?:

var query_index = req.originalUrl.indexOf('?'); 
var query_string = (query_index>=0)?req.originalUrl.slice(query_index+1):''; 
// 'tt=gg&hh=jj' or '' 

Si noti che se si dispone di a # to denote the end of the query, non sarà riconosciuto.

Se si vuole passare la stringa insieme a un nuovo URL, è necessario includere il ?:

var query_index = req.originalUrl.indexOf('?'); 
var query_string = (query_index>=0)?req.originalUrl.slice(query_index):''; 
// '&tt=gg&hh=jj' or '' 
res.redirect('/new-route'+query_string); 
// redirects to '/newroute?tt=gg&hh=jj' 
+1

'req.url.split ('?') [1]' funzionerebbe in modo errato per ** URL ** validi, contenenti più di uno '?' simbolo. –

+0

Accidenti, hai ragione! Ma l'ultimo '?' Sarà sempre l'inizio della query, giusto? Lascia che ti aggiusti così velocemente ... – Keith

+1

No, [il _primo_ '?'segna sempre l'inizio della query] (http://stackoverflow.com/a/2924187/3006854). Quindi passerò a 'indexOf()'. – Keith

Problemi correlati