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到语言中并且很好理解的时候我看不到这一点。