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

我试图使用Express 4路由器根据path使用不同的路由器。 我想要版本2处理的所有/api/v2/路由,以及版本1处理的其他所有路由。 下面的设置正确地为我提供了所有的version1路由,但似乎忽略了version2因为每次我testing这些端点时都会收到“无法获取…”消息。

routes.js:

 var version1 = require('./routes/vers1'); var version2 = require('./routes/vers2'); module.exports = function(app) { app.all('/api/v2/*', version2); app.all('/*', version1); }; 

方法路由( .get.post ,当然.all )是terminal。 这就是为什么你可以使用通配符。 .use不是terminal,不允许使用通配符 – 它充当前缀。 这是express的实现select。 使用.use没有通配符。

  • .use不设置图层路线
  • 所有其他方法设置图层路线
  • 如果路由设置,图层尝试处理请求 。 否则,该图层的path将从请求path中剥离(您在.use设置的/api/v2将被删除)。

app.use("/*", version1)作品纯属偶然。 这将匹配任何路线,并通过version1[method](path) 。 由于没有前缀去除,如果请求路由匹配path ,express将考虑这个匹配并服务那个路由。

使用.use

你想使用.use not .all

所有这些都是用于authentication的中间件

http://expressjs.com/api.html