Untuk memahami ini sepenuhnya, harap baca dokumentasi:http://expressjs.com/api.html #router.METODE
Bagaimana Rute Ekspres Menangkap Jalur
Saat Anda menggunakan :param
sebagai bagian dari jalur Anda, itu cocok dengan semuanya seperti /*
, dan nilai yang ditangkap disimpan di req.params.param
.
Bila Anda memiliki lebih dari satu aturan, yang pertama terdaftar adalah yang pertama diperiksa. Ini memeriksa setiap panggilan terhadap setiap aturan sampai kecocokan ditemukan. Jika Anda memanggil next()
tanpa nilai yang diteruskan ke sana, ia akan mencari kecocokan berikutnya (baik di rute yang sama, atau melanjutkan ke middleware berikutnya).
Jadi ketiga aturan ini akan dijalankan semua
var handleRoute = function(req, res, next){
console.log(req.path + ' ' + req.params.id + ' ' + req.params.user + ' ' + req.params[0]);
next();
}
route.route('/user/:id').get(handleRoute);
route.route('/user/:user').get(handleRoute);
route.route('/user/*').get(handleRoute);
Ketika saya meminta /user/foobar
, Saya akan melihat output berikut (dan mungkin kesalahan sebagai klien karena saya tidak pernah merespons :P)
/user/foobar foobar undefined undefined
/user/foobar undefined foobar undefined
/user/foobar undefined undefined foobar
Ini akan mengenai ketiganya, tetapi konteksnya berbeda untuk masing-masing.
Cara Menangkap Pola Jalur dengan Ekspresi Reguler
Jika Anda ingin mengambil rute terpisah untuk id (katakanlah semua angka) dan nama pengguna (semua huruf), Anda dapat melakukan ini:
var handleRoute = function(tag) {
return function(req, res, next) {
console.log(tag + ' ' + req.path + ' -> ' + req.params[0]);
res.status(200)
.json({
success: 'yay!'
});
};
};
route.route(/^\/user\/([0-9]+)$/i)
.get(handleRoute('id'));
route.route(/^\user\/([A-Za-z]+)$/i)
.get(handleRoute('user'));
route.route('/user/*')
.get(handleRoute('catch all'));
Perhatikan paratesis di sekitar grup tangkapan saya. Tanpa ini, params
kosong. Ini otomatis menangkap hanya dengan *
dalam string karena mereka adalah orang-orang baik. Saya akan mendapatkan yang berikut untuk output saat saya menjalankan tiga jenis berbeda.
id /user/123 -> 123
user /user/user -> user
catch all /user/user.1 -> user.1
Semua yang dijelaskan, Anda membuka diri terhadap beberapa vektor untuk bug untuk menyerang sistem Anda. Mungkin ingin memikirkan pola URL Anda.