expressjs路由中的可选扩展

我想有一个可选的扩展名,如.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 

看来你正在使用错误的路线模式。 这里是更正的一个:

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

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

像这样的东西:

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

尝试一个真正的正则expression式: app.get(/\/days-ago\/\w+(\.\w+)?/), function (req, res {... (或类似的)是相当有限的,它可能实际上能够expression你所需要的东西,但是当正则expression式被构build到语言中并且很好理解的时候我看不到这一点。