2016-08-20 100 views
0

我使用express-routes-versioning来版本化我的路由。使用semver快速版本路由

app.post('/messages', authUser, routesVersioning({ 
    "1.0.5": function(req, res) { 
     moduleMessages.addV105(req, res); 
    } 
}, function(req, res) { 
    moduleMessages.add(req, res); 
})); 

这工作正常,并为1.0.5版本,add()每隔版本调用addV105()。但是,对于每个版本< 1.0.5(1.0.4,1.0)而言,我想为每个版本> = 1.0.5(1.0.5,1.0.6,1.1.0,2.3 ...)和add()调用addV105()。 3,1.0.0 ..)

实现此目标的语法是什么?

+0

修正了missleading标题 – Chris

回答

2

express-routes-versioning不支持大量的semver操作/范围,只有^~,这些对您的用例无用。

另一种Express中间件是express-semver-routing,它在匹配方面更加灵活(它使用semver,因此您可以使用它的任何比较器)。

你需要重写你的路线设置了一下:

const version = require('express-semver-routing')(); 
... 
app.post('/messages', authUser, version('>= 1.0.5'), function(req, res) { 
    moduleMessages.addV105(req, res); 
}); 

app.post('/messages', authUser, function(req, res) { 
    moduleMessages.add(req, res); 
}); 

(我想你可能要切换version()authUser在第一路,否则当版本不authUser会被调用两次匹配版本)。

或者使用干原理,使用一个单独的路由器:

let router = express.Router(); 

router.use(authUser) 
     .post('/', version('>= 1.0.5'), function(req, res) { 
     moduleMessages.addV105(req, res); 
     }) 
     .post('/', function(req, res) { 
     moduleMessages.add(req, res); 
     }); 

app.use('/messages', router); 
+0

'app.post( '/消息/',版本( '> = 1.0.5'),AUTHUSER,功能(REQ,RES)'+'卷曲-X POST -H “接受版本:1.0.5” foo.bar/messages'在错误结束:'错误:无效semver值提供:[对象的对象]
    at /var/www/21messages.com/dev/node_modules/express-semver-routing/index.js:26:46' – Chris

+0

解决:https://github.com/n-johnson/express-semver-routing/issues/1 – Chris