2012-05-17 18 views
12

Puedo usar la siguiente para obtener la cadena de consulta.Cómo obtener la cadena de consulta no analizada de una solicitud http en Express

var query_string = request.query; 

Lo que necesito es la cadena de consulta sin procesar sin procesar. ¿Cómo lo consigo? Para la URL a continuación la cadena de consulta es { tt: 'gg' }, necesito tt=gg&hh=jj etc ....

http://127.0.0.1:8065?tt=gg 

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

Respuesta

24

Puede utilizar el módulo node 's URL según this ejemplo:

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

por ejemplo,

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

O simplemente ir directamente a la URL y substr después de la ?

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

(que es lo que require('url').parse() hace bajo el capó)

+0

¿Cómo obtengo la materia prima? request.query == {tt: 'gg'}. Quiero tt = gg. – Tampa

+1

Eso es lo que hace la respuesta. Es posible que desee tener en cuenta que 'query' anterior no es' request.query'. Este último es un miembro agregado por expreso. –

+0

No uso express. Necesito ser liviano – Tampa

0

Si usted quiere que sea que "ligera ", tienes que escribirlo tú mismo.

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

No veo cómo la reconstrucción de la cadena de consulta de una versión analizada es liviana en comparación con ir a la cadena url y 'substr' después de'? '. –

+0

@PeroPejovic Yo tampoco. Tampa dice que ha analizado la versión en query_string y necesita que se convierta en raw. Desde el contexto, asumí que solo tiene la versión analizada, no la URL completa – Mustafa

4

Puede usar req.originalUrl en express 3.x +. (Las versiones más antiguas pueden utilizar req.url del módulo HTTP del nodo.) Esto debería producir la cuerda en bruto, excluyendo el ?:

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

Tenga en cuenta que si usted tiene a # to denote the end of the query, no será reconocido.

Si desea pasar la cadena a lo largo de una nueva dirección URL, debe incluir la ?:

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]' funcionaría incorrectamente para las URL ** válidas **, que contienen más de una símbolo '?'. –

+0

¡Maldita sea, tienes razón! Pero el último '' 'siempre será el comienzo de la consulta, ¿verdad? Déjame arreglar eso rápido ... – Keith

+1

No, [el _primero_'?'siempre marca el comienzo de la consulta] (http://stackoverflow.com/a/2924187/3006854). Así que cambiaré a 'indexOf()'. – Keith

Cuestiones relacionadas