【问题标题】:optional extension in expressjs routeexpressjs 路由中的可选扩展
【发布时间】:2015-03-02 14:18:02
【问题描述】:
我想要一个可选的扩展名,例如.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
【问题讨论】:
标签:
node.js
express
routes
【解决方案1】:
您的路线似乎使用了错误的模式。这是更正后的:
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);
});
【解决方案2】:
尝试真正的正则表达式:app.get(/\/days-ago\/\w+(\.\w+)?/), function (req, res {...(或类似的)。路由参数内置语法非常有限。它实际上可能能够表达您的需求,但是我看不出将正则表达式内置到语言中并且很好理解的意义。