2015-01-05 19 views
5

Tôi muốn có một tiện ích mở rộng tùy chọn, như .xml hoặc .csv hoặc .json (mặc định, không có tiện ích mở rộng nào sẽ trả lại json).tiện ích mở rộng tùy chọn trong đường expressjs

app.get('/days-ago/:days(.:ext)?', function(req, res) { 

Điều này dường như không có tác dụng, có điều gì tôi đang làm sai không?

GET /days-ago/7.xml 
GET /days-ago/7.csv 
GET /days-ago/7.json 
GET /days-ago/7 

Trả lời

0

Hãy thử regex thực: app.get(/\/days-ago\/\w+(\.\w+)?/), function (req, res {... (hoặc tương tự). Thông số tuyến đường được xây dựng trong ngữ pháp là khá hạn chế. Nó thực sự có thể thể hiện những gì bạn cần, nhưng tôi không thấy điểm khi regex được xây dựng thành ngôn ngữ và được hiểu rõ.

+0

làm cách nào để nhận được thông số? – chovy

+0

req.params là một mảng trong số chúng –

6

Dường như bạn đang sử dụng mẫu sai cho tuyến đường. Dưới đây là sau khi chỉnh sửa:

app.get('/days-ago/:days\.:ext?', function(req, res) { 

Vì vậy, để đạt được mục tiêu của bạn tôi sẽ tạo ra một middleware để kiểm tra cho tham số trống và đặt nó vào mong muốn một

Something như sau:

var defaultParamMiddleware = function(req, res, next) { 
    if (!req.params.ext) { 
     req.params.ext = 'json'; 
    } 

    next(); 
}; 

app.get('/days-ago/:days\.:ext?', defaultParamMiddleware, function (req, res) { 
    res.json(req.params); 
}); 
Các vấn đề liên quan