MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Làm thế nào Express biết được đường dẫn Router nào sẽ sử dụng khi nhiều đường dẫn trùng khớp?

Để hiểu đầy đủ điều này, vui lòng đọc tài liệu: http://expressjs.com/api.html # bộ định tuyến.METHOD

Cách các tuyến đường nhanh chiếm được đường dẫn

Khi bạn sử dụng :param như một phần của đường dẫn của bạn, nó khớp với mọi thứ như /* và giá trị đã chụp được lưu trữ trong req.params.param .

Khi bạn có nhiều hơn một quy tắc, quy tắc đầu tiên được đăng ký là quy tắc đầu tiên được kiểm tra. Nó kiểm tra từng lệnh gọi so với từng quy tắc cho đến khi tìm thấy kết quả phù hợp. Nếu bạn gọi next() không có giá trị nào được chuyển cho nó, nó sẽ tìm kiếm kết quả phù hợp tiếp theo (trong cùng một lộ trình hoặc tiếp tục vào phần mềm trung gian tiếp theo).

Vì vậy, tất cả ba quy tắc này sẽ được chạy

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);

Khi tôi yêu cầu /user/foobar , Tôi sẽ thấy kết quả sau (và có thể là lỗi với tư cách là khách hàng vì tôi chưa bao giờ phản hồi:P)

/user/foobar foobar undefined undefined
/user/foobar undefined foobar undefined
/user/foobar undefined undefined foobar

Nó sẽ đánh trúng cả ba, nhưng bối cảnh của mỗi cái là khác nhau.

Cách chụp các mẫu đường dẫn bằng biểu thức chính quy

Nếu bạn muốn nắm bắt các tuyến đường riêng biệt cho id (giả sử là tất cả các số) và tên người dùng (tất cả các chữ cái), bạn có thể thực hiện điều này:

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'));

Lưu ý các parathesis xung quanh nhóm chụp của tôi. Nếu không có điều này, params trống rỗng. Nó tự động chụp chỉ với * trong chuỗi vì họ là những người tử tế. Tôi sẽ nhận được phần sau cho đầu ra khi tôi chạy với ba loại khác nhau.

id /user/123 -> 123
user /user/user -> user
catch all /user/user.1 -> user.1

Tất cả những gì đã giải thích, bạn đang mở cho mình một số vectơ để bọ xâm nhập vào hệ thống của bạn. Có thể muốn nghĩ về mẫu URL của bạn.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách tạo Người dùng và thêm Vai trò trong MongoDB

  2. Mongoose insert

  3. 5 cách để chọn hàng với giá trị tối thiểu cho nhóm của chúng trong SQL

  4. Chính xác thì ngoại lệ NullPointer ở đâu?

  5. MongoError:không có người dùng nào được xác thực