2016-08-20 102 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