Jawaban:
req.params
berisi parameter rute (di bagian jalur URL), dan req.query
berisi parameter kueri URL (setelah ?
di URL).
Anda juga dapat menggunakan req.param(name)
untuk mencari parameter di kedua tempat (dan juga req.body
), tetapi metode ini sekarang sudah usang.
req.param
sekarang tidak digunakan lagi. Node menyarankan menggunakan req.query
ataureq.params
Diberikan rute ini
app.get('/hi/:param1', function(req,res){} );
dan diberi URL ini
http://www.google.com/hi/there?qs1=you&qs2=tube
Anda akan memiliki:
persyaratan pertanyaan
{
qs1: 'you',
qs2: 'tube'
}
persyaratan params
{
param1: 'there'
}
/
Misalkan Anda telah menetapkan nama rute Anda seperti ini:
https://localhost:3000/user/:userid
yang akan menjadi:
https://localhost:3000/user/5896544
Di sini, jika Anda akan mencetak: request.params
{
userId : 5896544
}
begitu
request.params.userId = 5896544
jadi request.params adalah objek yang berisi properti ke rute bernama
dan request.query berasal dari parameter kueri di URL misalnya:
https://localhost:3000/user?userId=5896544
request.query
{
userId: 5896544
}
begitu
request.query.userId = 5896544
Anda seharusnya dapat mengakses kueri menggunakan notasi titik sekarang.
Jika Anda ingin mengakses katakanlah Anda menerima permintaan GET di /checkEmail?type=email&utm_source=xxxx&email=xxxxx&utm_campaign=XX
dan Anda ingin mengambil kueri yang digunakan.
var type = req.query.type,
email = req.query.email,
utm = {
source: req.query.utm_source,
campaign: req.query.utm_campaign
};
Params digunakan untuk parameter didefinisikan diri untuk menerima permintaan, sesuatu seperti (misalnya):
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)});
});
Saya ingin menyebutkan satu catatan penting mengenai req.query
, karena saat ini saya sedang mengerjakan fungsi pagination berdasarkan req.query
dan saya punya satu contoh menarik untuk ditunjukkan kepada Anda ...
Contoh:
// 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
});
});
};
Anda akan melihat +
tanda di depan req.query.pageSize
danreq.query.currentPage
Mengapa? Jika Anda menghapus +
dalam hal ini, Anda akan mendapatkan kesalahan, dan kesalahan itu akan dilemparkan karena kita akan menggunakan tipe yang tidak valid (dengan pesan kesalahan, field 'batas' harus berupa angka).
Penting : Secara default jika Anda mengekstrak sesuatu dari parameter kueri ini, itu akan selalu berupa string , karena itu datang dari URL dan itu diperlakukan sebagai teks.
Jika kita perlu bekerja dengan angka, dan mengubah pernyataan query dari teks menjadi angka, kita cukup menambahkan tanda plus di depan pernyataan.