如何正确使用Express 4多路路由器

How to correctly use Express 4 multiple routers

我正在尝试使用 Express 4 路由器根据路径使用不同的路由器。我希望 version2 处理所有 /api/v2/ 路由,version1 处理所有其他路由。下面的设置正确地为我提供了所有 version1 路由,但似乎忽略了 version2,因为我每次测试这些端点时都会收到一条 'Cannot GET...' 消息。

routes.js:

var version1 = require('./routes/vers1');
var version2 = require('./routes/vers2');

module.exports = function(app) {

  app.all('/api/v2/*', version2);

  app.all('/*', version1);

};

您想使用 .use 而不是 .all

.all 用于身份验证等中间件

http://expressjs.com/api.html

方法路线(.get.post,当然还有.all)是终端。这就是为什么您也可以对它们使用通配符的原因。 .use 不是终结符,也不允许使用通配符——它充当前缀。这是 express 的一个实现选择。使用不带通配符的 .use

app.use("/*", version1) 起作用纯属偶然。这将匹配任何路由并落入 version1[method](path)。由于没有要剥离的前缀,如果请求路由匹配 path,express 将认为这是一个匹配并提供该路由。

使用.use.