2017-01-19 23 views
7

Tôi đang sử dụng Express để xử lý tuyến đường có định dạng /articles/:year/:month/:day, trong đó năm, tháng và ngày là tùy chọn.Nhiều thông số tuyến đường tùy chọn trong Express?

  • Nếu không có một trong ba thông số được đưa ra, tất cả các bài viết sẽ được trả về;
  • Nếu năm được đưa ra, các bài báo của năm đó sẽ được trả lại;
  • Nếu năm và tháng được đưa ra, các bài báo của năm và tháng đó sẽ được trả lại;
  • Nếu tất cả ba thông số được cung cấp, các bài viết của năm đó, tháng và ngày sẽ được trả lại.

Câu hỏi của tôi là, làm cách nào để đặt tùy chọn? Với tuyến đường hiện tại tôi đã xác định, trừ khi tất cả ba thông số đều có mặt, nó sẽ không thể được giải quyết và sẽ rơi vào tuyến đường mặc định.

+0

Bạn có thể xác định nhiều tuyến đường đối với trường hợp khi một năm có mặt, năm và tháng có mặt, tất cả các thông số có mặt và không có mặt, hoặc bạn có thể di chuyển các thông số để truy vấn chuỗi –

+0

Bạn cũng có thể làm cho họ không bắt buộc bằng cách đặt một '?' sau họ – hjpotter92

+0

@VsevolodGoloviznin Cảm ơn lời khuyên của bạn. Chúng thực sự hữu ích và chúng phù hợp với trường hợp sử dụng của tôi. Cuối cùng tôi đã chọn giải pháp từ hjpotter92 mặc dù nó cũng yên tĩnh thanh lịch và dẫn đến mã ngắn hơn. Cảm ơn một lần nữa cho sự giúp đỡ của bạn anyways. – CLDev

Trả lời

11

Các expressjs's guide để định tuyến đề cập:

Express sử dụng path-to-regexp cho phù hợp với tuyến đường; xem tài liệu hướng dẫn đường dẫn đến tài liệu cho tất cả các khả năng trong việc xác định đường dẫn tuyến đường . Express Route Tester là một công cụ hữu ích để kiểm tra các tuyến đường cơ bản Express, mặc dù nó không hỗ trợ khớp mẫu.

Về cơ bản, bạn có thể sử dụng ký tự ? để đặt tham số tùy chọn.

/articles/:year?/:month?/:day? 
7

Được chỉnh sửa cho mục đích riêng có 3 tùy chọn khác nhau trong một câu trả lời. Tín dụng cho @ hjpotter92 cho câu trả lời regex của mình.

Với URL Params

Với regex

app.get('/articles/:year?/:month?/:day?', function(req, res) { 
    var year = req.query.year; //either a value or undefined 
    var month = req.query.month; 
    var day = req.query.day; 
} 

Nếu không có regex

var getArticles = function(year, month, day) { ... } 

app.get('/articles/:year', function(req, res) { 
    getArticles(req.params.year); 
} 
app.get('/articles/:year/:month', function(req, res) { 
    getArticles(req.params.year, req.params.month); 
} 
app.get('/articles/:year/:month/:day', function(req, res) { 
    getArticles(req.params.year, req.params.month, req.params.day); 
} 

Xác định 3 đường dẫn bạn muốn hỗ trợ và tái sử dụng các chức năng tương tự

012.

Với Query Params

app.get('/articles', function(req, res) { 
    var year = req.query.year; //either a value or undefined 
    var month = req.query.month; 
    var day = req.query.day; 
} 

Url cho thiết bị đầu cuối này sẽ trông như thế này:

http://localhost/articles?year=2016&month=1&day=19 
+0

Cảm ơn rất nhiều sự giúp đỡ của bạn. Tôi nghĩ rằng họ giải quyết trường hợp sử dụng của tôi một cách hoàn hảo (đặc biệt là đề xuất đa tuyến), chỉ là hjpotter92 đã đề xuất một giải pháp đơn giản hơn. Cảm ơn một lần nữa cho sự giúp đỡ của bạn anyways! – CLDev

+0

Điều này đã giúp tôi thaks người đàn ông cho ans –

Các vấn đề liên quan