Yanıtlar:
req.params
rota parametrelerini (URL'nin yol kısmında) req.query
içerir ve URL sorgu parametrelerini (URL'den sonra ?
) içerir.
Her req.param(name)
iki yerde de bir parametre aramak için kullanabilirsiniz (hem de req.body
), ancak bu yöntem artık kullanımdan kaldırılmıştır.
req.param
artık kullanımdan kaldırıldı. Düğüm req.query
veya kullanmayı öneriyorreq.params
Bu rota verildiğinde
app.get('/hi/:param1', function(req,res){} );
ve bu URL verildi
http://www.google.com/hi/there?qs1=you&qs2=tube
Sahip olacaksın:
req. sorgu
{
qs1: 'you',
qs2: 'tube'
}
req. parametreler
{
param1: 'there'
}
/
Güzergahınızın adını şu şekilde tanımladığınızı varsayalım:
https://localhost:3000/user/:userid
hangisi olacak:
https://localhost:3000/user/5896544
Burada yazdıracaksanız: request.params
{
userId : 5896544
}
yani
request.params.userId = 5896544
bu nedenle request.params , adlandırılmış yolun özelliklerini içeren bir nesnedir
ve request.query , URL’deki sorgu parametrelerinden gelir, örneğin:
https://localhost:3000/user?userId=5896544
request.query
{
userId: 5896544
}
yani
request.query.userId = 5896544
Şimdi nokta notasyonu kullanarak sorguya erişebilmelisiniz.
Erişmek istiyorsanız, adresinde bir GET isteği aldığınızı /checkEmail?type=email&utm_source=xxxx&email=xxxxx&utm_campaign=XX
ve kullanılan sorguyu almak istediğinizi varsayalım .
var type = req.query.type,
email = req.query.email,
utm = {
source: req.query.utm_source,
campaign: req.query.utm_campaign
};
Parametreler , istek almak için kendi tanımlı parametre için kullanılır, örneğin (örnek):
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)});
});
Bununla ilgili önemli bir nottan bahsetmek istiyorum req.query
, çünkü şu anda temel alan sayfalandırma işlevi üzerinde çalışıyorum req.query
ve size göstereceğim ilginç bir örnek var ...
Misal:
// 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
});
});
};
Fark edecek +
önünde işareti req.query.pageSize
vereq.query.currentPage
Neden? +
Bu durumda silerseniz , bir hata alırsınız ve bu hata, geçersiz tür kullanacağımız için atılır (hata mesajı 'limit' alanı sayısal olmalıdır).
Önemli : Varsayılan olarak, bu sorgu parametrelerinden bir şey çıkarırsanız, bu her zaman bir dize olacaktır , çünkü URL'den gelir ve metin olarak kabul edilir.
Sayılarla çalışmamız ve sorgu ifadelerini metinden sayıya dönüştürmemiz gerekirse, ifadenin önüne basitçe bir artı işareti ekleyebiliriz.