我有一个Express路由/doc/:id
,用于提供文档的HTML表示,我希望它在附加" .epub
"时提供EPUB表示。但是,快递并没有在一段时间内分开,所以如果我使用/doc/:id.epub
将req.params.id
设置为" id.epub
"。有没有办法将文件扩展名识别为单独的参数,还是只需要使用正则表达式来提取它?
我查看了res.format
,但似乎只有在设置了Accepted
标头时才有效,如果只是将URL输入到浏览器中就不会这样,就我而言可以看到。
答案 0 :(得分:3)
这有效:
app.get('/doc/:filename.:ext', function(req, res) {
...
});
这要求/doc/
后面的部分至少包含一个句号,这可能是也可能不是问题。
答案 1 :(得分:0)
根据您描述的行为,我认为您的路线匹配规则可能无序。
这有效:
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。