在expressjs路线中的可选扩展

时间:2015-01-05 02:58:21

标签: node.js express routes

我希望有一个可选扩展名,例如.xml.csv.json(默认情况下,没有扩展名会返回json)。

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

这似乎不起作用,有什么我做错了吗?

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

2 个答案:

答案 0 :(得分:7)

您似乎使用错误的模式进行路线。这是更正的一个:

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

因此,为了实现您的目标,我将创建一个中间件来检查空参数并将其设置为所需的参数

这样的事情:

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

答案 1 :(得分:0)

尝试一个真正的正则表达式:app.get(/\/days-ago\/\w+(\.\w+)?/), function (req, res {...(或类似的)。路由参数内置语法非常有限。它实际上可以表达你所需要的东西,但是当正则表达式被构建到语言中并且被很好地理解时,我并没有看到这一点。