¿Cómo acceder a los parámetros GET después de "?" en expreso?
Sé cómo obtener los parámetros para consultas como esta:
app.get('/sample/:id', routes.sample);
En este caso, puedo utilizar req.params.id
para obtener el parámetro (por ejemplo, 2
en /sample/2
).
Sin embargo, para URL como /sample/2?color=red
, ¿cómo puedo acceder a la variable color
?
Lo intenté req.params.color
pero no funcionó.
Entonces, después de revisar la referencia expresa , descubrí que req.query.color
me 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
})
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);
});
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
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.
La respuesta de @Zugwait es correcta. req.param()
es obsoleto. Deberías usar req.params
, req.query
o req.body
.
Pero sólo para que quede más claro:
req.params
se completará solo con los valores de ruta. Es decir, si tienes una ruta como /users/:id
, puedes acceder a ella id
ya sea en req.params.id
o req.params['id']
.
req.query
y req.body
se 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.query
y los parámetros del cuerpo de una publicación estarán disponibles en req.body
.
Entonces, respondiendo a tus preguntas, como color
no está en la ruta, deberías poder conseguirlo usando req.query.color
o req.query['color']
.