2012-06-29 11 views
51

Tôi có một tuyến đường trên ứng dụng Express trông như thế này:tốc điều kiện đường tham số

app.get('/:id', function (request, response) { 
    … 
}); 

ID sẽ luôn luôn là một số. Tuy nhiên, tại thời điểm này tuyến đường này phù hợp với những thứ khác, chẳng hạn như /login.

Tôi nghĩ rằng tôi muốn hai điều từ này:

  1. để chỉ sử dụng tuyến đường này nếu ID là một con số, và
  2. chỉ nếu không có một lộ trình cho rằng paramater cụ thể đã được xác định (chẳng hạn như cuộc đụng độ với /login).

Việc này có thể thực hiện được không?

Trả lời

104

Mở rộng về câu trả lời Marius, bạn có thể cung cấp các regex VÀ tên tham số:

app.get('/:id(\\d+)/', function (req, res){ 
    // req.params.id is now defined here for you 
}); 
+0

Tuyệt vời, nhưng bây giờ nếu tôi có lộ trình r nói '/ 1' ở nơi khác, nó vẫn gọi đó. Dù sao để ngăn chặn điều này? –

+8

Miễn là tuyến đường '/ 1' rõ ràng được thêm vào trước, nó sẽ được ưu tiên. – JohnnyHK

+2

Bạn có thể đặt các tuyến đường rõ ràng trước, như JohnnyHK nói. Bạn cũng có thể xác định RegEx để không khớp với các tuyến đường bạn muốn bỏ qua. – danmactough

2

Bạn có thể sử dụng:

// /12345 
app.get(/\/([^\/]+)\/?/, function(req, res){ 
    var id = req.params[0]; 
    // do something 
}); 

hay này :

// /post/12345 
app.get(/\/post\/([^\/]+)\/?/, function(req, res){ 
    var id = req.params[0]; 
    // do something 
});