Respuestas:
req.params
contiene parámetros de ruta (en la parte de ruta de la URL) y req.query
contiene los parámetros de consulta de URL (después de ?
en la URL).
También puede usar req.param(name)
para buscar un parámetro en ambos lugares (así como req.body
), pero este método ahora está en desuso.
req.param
ahora está en desuso. Node sugiere usar req.query
oreq.params
Dada esta ruta
app.get('/hi/:param1', function(req,res){} );
y dada esta URL
http://www.google.com/hi/there?qs1=you&qs2=tube
Usted tendrá:
req. consulta
{
qs1: 'you',
qs2: 'tube'
}
req. params
{
param1: 'there'
}
/
Suponga que ha definido el nombre de su ruta así:
https://localhost:3000/user/:userid
que se convertirá en:
https://localhost:3000/user/5896544
Aquí, si va a imprimir: request.params
{
userId : 5896544
}
entonces
request.params.userId = 5896544
así que request.params es un objeto que contiene propiedades a la ruta nombrada
y request.query proviene de los parámetros de consulta en la URL, por ejemplo:
https://localhost:3000/user?userId=5896544
request.query
{
userId: 5896544
}
entonces
request.query.userId = 5896544
Debería poder acceder a la consulta usando notación de puntos ahora.
Si desea acceder, diga que está recibiendo una solicitud GET en /checkEmail?type=email&utm_source=xxxx&email=xxxxx&utm_campaign=XX
y desea obtener la consulta utilizada.
var type = req.query.type,
email = req.query.email,
utm = {
source: req.query.utm_source,
campaign: req.query.utm_campaign
};
Los parámetros se utilizan para el parámetro autodefinido para recibir la solicitud, algo como (ejemplo):
router.get('/:userID/food/edit/:foodID', function(req, res){
//sample GET request at '/xavg234/food/edit/jb3552'
var userToFind = req.params.userID;//gets xavg234
var foodToSearch = req.params.foodID;//gets jb3552
User.findOne({'userid':userToFind}) //dummy code
.then(function(user){...})
.catch(function(err){console.log(err)});
});
Quiero mencionar una nota importante al respecto req.query
, porque actualmente estoy trabajando en la funcionalidad de paginación basada enreq.query
y tengo un ejemplo interesante para demostrarles ...
Ejemplo:
// Fetching patients from the database
exports.getPatients = (req, res, next) => {
const pageSize = +req.query.pageSize;
const currentPage = +req.query.currentPage;
const patientQuery = Patient.find();
let fetchedPatients;
// If pageSize and currentPage are not undefined (if they are both set and contain valid values)
if(pageSize && currentPage) {
/**
* Construct two different queries
* - Fetch all patients
* - Adjusted one to only fetch a selected slice of patients for a given page
*/
patientQuery
/**
* This means I will not retrieve all patients I find, but I will skip the first "n" patients
* For example, if I am on page 2, then I want to skip all patients that were displayed on page 1,
*
* Another example: if I am displaying 7 patients per page , I want to skip 7 items because I am on page 2,
* so I want to skip (7 * (2 - 1)) => 7 items
*/
.skip(pageSize * (currentPage - 1))
/**
* Narrow dont the amound documents I retreive for the current page
* Limits the amount of returned documents
*
* For example: If I got 7 items per page, then I want to limit the query to only
* return 7 items.
*/
.limit(pageSize);
}
patientQuery.then(documents => {
res.status(200).json({
message: 'Patients fetched successfully',
patients: documents
});
});
};
Notarás un +
letrero frente areq.query.pageSize
yreq.query.currentPage
¿Por qué? Si borras+
en este caso, obtendrá un error, y ese error se lanzará porque usaremos un tipo no válido (con el mensaje de error, el campo 'límite' debe ser numérico).
Importante : De forma predeterminada, si extrae algo de estos parámetros de consulta, siempre será una cadena , porque viene la URL y se trata como un texto.
Si necesitamos trabajar con números y convertir declaraciones de consulta de texto a número, simplemente podemos agregar un signo más delante de la declaración.