MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana cara Express mengetahui jalur Router mana yang digunakan saat beberapa jalur cocok?

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.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bidang tidak dikenal:kesalahan 'ntorreturn' di documenDB

  2. Metode penyimpanan model Mongoose yang mengejek / mematikan

  3. Cara mengelompokkan dokumen dengan bidang tertentu dalam agregasi mongodb

  4. Spring-boot:perbandingan tanggal mongoDB tidak berfungsi

  5. Masalah MongoDB NumberLong/$numberLong saat mengonversi kembali ke Objek Java