【问题标题】:Getting filetype in an Express route在 Express 路由中获取文件类型
【发布时间】:2013-04-26 15:16:06
【问题描述】:
我有一个 Express 路由 /doc/:id,它提供文档的 HTML 表示,我希望它在附加“.epub”时提供 EPUB 表示。但是,Express 不会在句点上分开,所以如果我使用 /doc/:id.epub 将 req.params.id 设置为“id.epub”。有没有办法将文件扩展名识别为单独的参数,还是我只需要使用正则表达式来提取它?
我查看了res.format,但似乎这仅在设置了Accepted 标头时才有效,据我所知,如果只是将URL 输入浏览器则不会。
【问题讨论】:
标签:
node.js
express
routes
【解决方案1】:
这有效:
app.get('/doc/:filename.:ext', function(req, res) {
...
});
这要求/doc/ 后面的部分至少包含一个句点,这可能是也可能不是问题。
【解决方案2】:
根据您描述的行为,我认为您的路由匹配规则可能有问题。
这行得通:
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。