Sé cómo obtener los parámetros para consultas como esta:
app.get('/sample/:id', routes.sample);
En este caso, puedo usar req.params.id
para obtener el parámetro (por ejemplo, 2
en /sample/2
).
Sin embargo, para url like /sample/2?color=red
, ¿cómo puedo acceder a la variable color
?
Lo intenté req.params.color
pero no funcionó.
node.js
express
query-string
Hanfei Sun
fuente
fuente
id
en su función como esta:var sampleId = req.params.id;
.req.params.whatever
en las últimas versiones.req.params
es diferente dereq.query
! expressjs.com/en/api.html#req.params expressjs.com/en/api.html#req.query @adelriosantiagoUse req.query, para obtener el valor en el parámetro de cadena de consulta en la ruta. Consulte req.query . Digamos que si en una ruta, http: // localhost: 3000 /? Name = satyam desea obtener el valor para el parámetro de nombre, entonces su controlador de ruta 'Obtener' será así: -
fuente
Actualización:
req.param()
ahora está en desuso, por lo que en adelante no use 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
req.param(parameterName, defaultValue)
.En tu caso:
De la guía express:
Tenga en cuenta que la guía establece lo siguiente:
Sin embargo, en la práctica, he descubierto
req.param()
que es lo suficientemente claro y facilita ciertos tipos de refactorización.fuente
La cadena de consulta y los parámetros son diferentes.
Debe usar ambos en una única URL de enrutamiento
Por favor, consulte el siguiente ejemplo puede ser útil para usted.
Obtener el enlace para pasar su segundo segmento es su ejemplo de identificación: http: // localhost: port / sample / 123
Si tiene problemas, utilice las variables de paso como cadena de consulta con '?' operador
Obtenga un enlace como este: http: // localhost: port / sample? Id = 123
Ambos en un solo ejemplo
Obtenga un ejemplo de enlace: http: // localhost: port / sample / 123? Id = 123
fuente
La respuesta de @ Zugwait es correcta.
req.param()
es obsoleto. Deberías usarreq.params
,req.query
oreq.body
.Pero solo para hacerlo más claro:
req.params
se completará solo con los valores de ruta. Es decir, si tiene una ruta como/users/:id
, puede acceder a la rutaid
enreq.params.id
oreq.params['id']
.req.query
yreq.body
se completará con todos los parámetros, independientemente de si están o no en la ruta. Por supuesto, los parámetros en la cadena de consulta estarán disponibles enreq.query
y los parámetros en un cuerpo de publicación estarán disponibles enreq.body
.Entonces, respondiendo a sus preguntas, ya
color
que no está en la ruta, debería poder obtenerlas usandoreq.query.color
oreq.query['color']
.fuente
El manual expreso dice que debe usar req.query para acceder a QueryString.
fuente
fuente
Una buena técnica que comencé a usar con algunas de mis aplicaciones en express es crear un objeto que combine la consulta, los parámetros y los campos del cuerpo del objeto de solicitud de express.
Luego, en el cuerpo de su controlador, o en cualquier otro lugar dentro del alcance de la cadena de solicitud expresa, puede usar algo como a continuación:
Esto hace que sea agradable y práctico "profundizar" en todos los "datos personalizados" que un usuario haya enviado con su solicitud.
Nota
¿Por qué el campo de 'accesorios'? Como era un fragmento reducido, utilizo esta técnica en varias de mis API, también almaceno datos de autenticación / autorización en este objeto, como se muestra a continuación.
fuente