使用semver进行快速版本路由

时间:2016-08-20 12:39:04

标签: node.js express semantic-versioning

我使用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 ..)

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

1 个答案:

答案 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);