如何正确使用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 用于身份验证等中间件
方法路线(.get
、.post
,当然还有.all
)是终端。这就是为什么您也可以对它们使用通配符的原因。 .use
不是终结符,也不允许使用通配符——它充当前缀。这是 express 的一个实现选择。使用不带通配符的 .use
。
.use
does not set the layer route
- all other methods set the layer route
- if the route is set, layer attempts to handle the request。否则,层的路径将从请求路径中删除(您在
.use
中设置的 /api/v2
将被删除)。
app.use("/*", version1)
起作用纯属偶然。这将匹配任何路由并落入 version1[method](path)
。由于没有要剥离的前缀,如果请求路由匹配 path
,express 将认为这是一个匹配并提供该路由。
使用.use
.
我正在尝试使用 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 用于身份验证等中间件
方法路线(.get
、.post
,当然还有.all
)是终端。这就是为什么您也可以对它们使用通配符的原因。 .use
不是终结符,也不允许使用通配符——它充当前缀。这是 express 的一个实现选择。使用不带通配符的 .use
。
.use
does not set the layer route- all other methods set the layer route
- if the route is set, layer attempts to handle the request。否则,层的路径将从请求路径中删除(您在
.use
中设置的/api/v2
将被删除)。
app.use("/*", version1)
起作用纯属偶然。这将匹配任何路由并落入 version1[method](path)
。由于没有要剥离的前缀,如果请求路由匹配 path
,express 将认为这是一个匹配并提供该路由。
使用.use
.