我正在尝试让一条路由覆盖/foo
下的所有内容,包括/foo
本身。我试过使用/foo*
,除了它与/foo
不匹配之外,它什么都可以用。请注意:
var express = require("express"),
app = express.createServer();
app.get("/foo*", function(req, res, next){
res.write("Foo*\n");
next();
});
app.get("/foo", function(req, res){
res.end("Foo\n");
});
app.get("/foo/bar", function(req, res){
res.end("Foo Bar\n");
});
app.listen(3000);
输出:
$ curl localhost:3000/foo
Foo
$ curl localhost:3000/foo/bar
Foo*
Foo Bar
我有什么选择?我想出的最好的办法是路由/fo*
,这当然不是最优的,因为它会匹配太多。
发布于 2011-05-28 20:35:06
我想你必须要有两条路线。如果您查看连接路由器的第331行,路径中的*将替换为.+,因此将匹配1个或多个字符。
https://github.com/senchalabs/connect/blob/master/lib/middleware/router.js
如果您有两个执行相同操作的路由,您可以执行以下操作以使其保持DRY。
var express = require("express"),
app = express.createServer();
function fooRoute(req, res, next) {
res.end("Foo Route\n");
}
app.get("/foo*", fooRoute);
app.get("/foo", fooRoute);
app.listen(3000);
发布于 2016-10-06 19:53:57
在数组中,您还可以使用传递给req.params的变量:
app.get(["/:foo", "/:foo/:bar"], /* function */);
发布于 2016-12-04 01:48:05
对于那些正在学习node/express的人(就像我一样):如果可能的话,不要使用通配符路由!
我还想使用通配符路由实现GET /users/:id/任何内容的路由。这就是我来这里的原因。
更多信息:https://blog.praveen.science/wildcard-routing-is-an-anti-pattern/
https://stackoverflow.com/questions/6161567
复制相似问题