¿Cómo acceder a los parámetros GET después de "?" en expreso?

Resuelto Hanfei Sun asked hace 11 años • 10 respuestas

Sé cómo obtener los parámetros para consultas como esta:

app.get('/sample/:id', routes.sample);

En este caso, puedo utilizar req.params.idpara obtener el parámetro (por ejemplo, 2en /sample/2).

Sin embargo, para URL como /sample/2?color=red, ¿cómo puedo acceder a la variable color?

Lo intenté req.params.colorpero no funcionó.

Hanfei Sun avatar Jun 09 '13 15:06 Hanfei Sun
Aceptado

Entonces, después de revisar la referencia expresa , descubrí que req.query.colorme devolvería el valor que estoy buscando.

req.params se refiere a elementos con un ':' en la URL y req.query se refiere a elementos asociados con '?'

Ejemplo:

GET /something?color1=red&color2=blue

Luego en express, el manejador:

app.get('/something', (req, res) => {
    req.query.color1 === 'red'  // true
    req.query.color2 === 'blue' // true
})
Hanfei Sun avatar Jun 09 '2013 08:06 Hanfei Sun

Utilice req.query para obtener el valor del parámetro de cadena de consulta en la ruta. Consulte solicitud.query . Digamos que si en una ruta, http://localhost:3000/?name=satyam desea obtener el valor del parámetro de nombre, entonces su controlador de ruta 'Obtener' será así

app.get('/', function(req, res){
    console.log(req.query.name);
    res.send('Response send to client::'+req.query.name);
});
satyam kumar avatar Aug 28 '2016 17:08 satyam kumar

La cadena de consulta y los parámetros son diferentes.

Debes usar ambos en una URL de enrutamiento única

Consulte el siguiente ejemplo que puede resultarle útil.

app.get('/sample/:id', function(req, res) {

 var id = req.params.id; //or use req.param('id')

  ................

});

Obtenga el enlace para pasar su segundo segmento es su ejemplo de identificación: http://localhost:port/sample/123

Si tiene algún problema, utilice Pasar variables como cadena de consulta usando '?' operador

  app.get('/sample', function(req, res) {

     var id = req.query.id; 

      ................

    });

Obtenga un enlace como este ejemplo: http://localhost:port/sample?id=123

Ambos en un solo ejemplo.

app.get('/sample/:id', function(req, res) {

 var id = req.params.id; //or use req.param('id')
 var id2 = req.query.id; 
  ................

});

Obtener ejemplo de enlace: http://localhost:port/sample/123?id=123

Raja Ram T avatar Jul 05 '2016 10:07 Raja Ram T

Actualización: req.param() ahora está en desuso, por lo que en el futuro no utilice esta respuesta.


Su respuesta es la forma preferida de hacerlo, sin embargo, pensé en señalar que también puede acceder a los parámetros de URL, publicación y ruta, todo con req.param(parameterName, defaultValue).

En tu caso:

var color = req.param('color');

De la guía expresa:

La búsqueda se realiza en el siguiente orden:

  • parámetros requeridos
  • cuerpo requerido
  • consulta.req

Tenga en cuenta que la guía establece lo siguiente:

Se debe favorecer el acceso directo a req.body, req.params y req.query para mayor claridad, a menos que realmente acepte la entrada de cada objeto.

Sin embargo, en la práctica he descubierto req.param()que es bastante claro y facilita ciertos tipos de refactorización.

Aaron Silverman avatar Sep 22 '2014 15:09 Aaron Silverman

La respuesta de @Zugwait es correcta. req.param()es obsoleto. Deberías usar req.params, req.queryo req.body.

Pero sólo para que quede más claro:

req.paramsse completará solo con los valores de ruta. Es decir, si tienes una ruta como /users/:id, puedes acceder a ella idya sea en req.params.ido req.params['id'].

req.queryy req.bodyse completará con todos los parámetros, independientemente de si están o no en la ruta. Por supuesto, los parámetros de la cadena de consulta estarán disponibles en req.queryy los parámetros del cuerpo de una publicación estarán disponibles en req.body.

Entonces, respondiendo a tus preguntas, como colorno está en la ruta, deberías poder conseguirlo usando req.query.coloro req.query['color'].

Andre Pena avatar Aug 02 '2015 16:08 Andre Pena