Réponses:
req.params
contient les paramètres de route (dans la partie chemin de l'URL) et req.query
contient les paramètres de requête d'URL (après le ?
dans l'URL).
Vous pouvez également utiliser req.param(name)
pour rechercher un paramètre aux deux endroits (ainsi que req.body
), mais cette méthode est désormais obsolète.
req.param
est désormais obsolète. Node suggère d'utiliser req.query
oureq.params
Compte tenu de cet itinéraire
app.get('/hi/:param1', function(req,res){} );
et étant donné cette URL
http://www.google.com/hi/there?qs1=you&qs2=tube
Tu vas avoir:
req. requete
{
qs1: 'you',
qs2: 'tube'
}
req. paramètres
{
param1: 'there'
}
/
Supposons que vous ayez défini le nom de votre itinéraire comme ceci:
https://localhost:3000/user/:userid
qui deviendra:
https://localhost:3000/user/5896544
Ici, si vous imprimez: request.params
{
userId : 5896544
}
alors
request.params.userId = 5896544
donc request.params est un objet contenant les propriétés de la route nommée
et request.query provient des paramètres de requête dans l'URL, par exemple:
https://localhost:3000/user?userId=5896544
request.query
{
userId: 5896544
}
alors
request.query.userId = 5896544
Vous devriez pouvoir accéder à la requête en utilisant la notation par points maintenant.
Si vous souhaitez accéder, dites que vous recevez une requête GET à /checkEmail?type=email&utm_source=xxxx&email=xxxxx&utm_campaign=XX
et que vous souhaitez récupérer la requête utilisée.
var type = req.query.type,
email = req.query.email,
utm = {
source: req.query.utm_source,
campaign: req.query.utm_campaign
};
Les paramètres sont utilisés pour le paramètre auto-défini pour la réception de la demande, quelque chose comme (exemple):
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)});
});
Je tiens à mentionner une note importante concernant req.query
, car actuellement je travaille sur la fonctionnalité de pagination basée sur req.query
et j'ai un exemple intéressant à vous montrer ...
Exemple:
// 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
});
});
};
Vous remarquerez un +
signe devant req.query.pageSize
etreq.query.currentPage
Pourquoi? Si vous supprimez +
dans ce cas, vous obtiendrez une erreur, et cette erreur sera renvoyée car nous utiliserons un type non valide (avec un message d'erreur, le champ «limite» doit être numérique).
Important : par défaut, si vous extrayez quelque chose à partir de ces paramètres de requête, ce sera toujours une chaîne , car elle provient de l'URL et elle est traitée comme un texte.
Si nous devons travailler avec des nombres et convertir des instructions de requête de texte en nombre, nous pouvons simplement ajouter un signe plus devant l'instruction.