【问题标题】:Express version routing with semver使用 semver 的 Express 版本路由
【发布时间】:2016-12-27 12:18:33
【问题描述】:

我正在使用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(),对于每个

实现这一点的语法是什么?

【问题讨论】:

  • 修正了误导性的标题

标签: node.js express semantic-versioning


【解决方案1】:

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

【讨论】:

  • app.post('/messages/', version('>= 1.0.5'), authUser, function (req, res) + curl -X POST -H "Accept-Version: 1.0.5" foo.bar/messages 以错误结尾:Error: Invalid semver value provided: [object Object]<br>    at /var/www/21messages.com/dev/node_modules/express-semver-routing/index.js:26:46
猜你喜欢
  • 1970-01-01
  • 2017-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-22
  • 2016-10-31
  • 2015-08-23
  • 2023-03-22
相关资源
最近更新 更多