我使用express-routes-versioning来修改路线。
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调用addV105()
,为每个其他版本调用add()
。但我希望为每个版本调用addV105()
,对于每个版本< = 1.0.5(1.0.5,1.0.6,1.1.0,2.3 ......)和add()
1.0.5(1.0.4,1.0.3,1.0.0 ..)
实现此目的的语法是什么?
答案 0 :(得分: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
将被调用两次。
或者使用DRY原则,使用单独的路由器:
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);