在Express路线中获取文件types

我有一个Express route /doc/:id ,用于提供文档的HTML表示,我希望它在附加“ .epub ”时用于EPUB表示。 不过,Express在一段时间内不会分开,所以如果我使用/doc/:id.epubreq.params.id设置为“ id.epub ”。 有没有办法将文件扩展名识别为一个单独的参数,或者我只是需要使用正则expression式来提取它?

我已经看过res.format ,但是看起来这只有在Accepted头文件被设置的情况下才有效,就我所见,如果URL被简单地input到浏览器中,它就不会被使用。

这工作:

 app.get('/doc/:filename.:ext', function(req, res) { ... }); 

这要求/doc/中的部分至less包含一个句点,这可能是问题,也可能不是问题。

根据你所描述的行为,我认为你可能有你的路线匹配规则不按顺序。

这工作:

 app.get('/doc/:id.epub', function(req, res, next){ res.send('id: ' + req.params.id); //match /doc/x.epub (id=x) }); app.get('/doc/:id', function(req, res, next){ res.send('id: ' + req.params.id); //match doc/x (id=x) | doc/y.html (id=y.html) }); 

如果/ doc:/:id是第一个,你会得到/doc/x.epub的x.epub的id。