使用 semver 的快速版本路由
Express version routing with semver
我正在使用 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()
。但是我想为每个 >= 1.0.5(1.0.5、1.0.6、1.1.0、2.3...)的版本调用 addV105()
,为 < 1.0 的每个版本调用 add()
。 5 (1.0.4, 1.0.3, 1.0.0..)
实现这个的语法是什么?
express-routes-versioning
不支持很多 semver operations/ranges,仅支持 ^
和 ~
,它们对您的用例没有用。
另一种 Express 中间件是 express-semver-routing
, which is more flexible in terms of matching (it uses 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原则,使用单独的router:
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);
我正在使用 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()
。但是我想为每个 >= 1.0.5(1.0.5、1.0.6、1.1.0、2.3...)的版本调用 addV105()
,为 < 1.0 的每个版本调用 add()
。 5 (1.0.4, 1.0.3, 1.0.0..)
实现这个的语法是什么?
express-routes-versioning
不支持很多 semver operations/ranges,仅支持 ^
和 ~
,它们对您的用例没有用。
另一种 Express 中间件是 express-semver-routing
, which is more flexible in terms of matching (it uses 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原则,使用单独的router:
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);