首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Express-js通配符路由,用于覆盖路径下的所有内容(包括路径

Express-js通配符路由,用于覆盖路径下的所有内容(包括路径
EN

Stack Overflow用户
提问于 2011-05-28 20:13:24
回答 3查看 122.9K关注 0票数 109

我正在尝试让一条路由覆盖/foo下的所有内容,包括/foo本身。我试过使用/foo*,除了它与/foo不匹配之外,它什么都可以用。请注意:

代码语言:javascript
复制
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);

输出:

代码语言:javascript
复制
$ curl localhost:3000/foo
Foo
$ curl localhost:3000/foo/bar
Foo*
Foo Bar

我有什么选择?我想出的最好的办法是路由/fo*,这当然不是最优的,因为它会匹配太多。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-28 20:35:06

我想你必须要有两条路线。如果您查看连接路由器的第331行,路径中的*将替换为.+,因此将匹配1个或多个字符。

https://github.com/senchalabs/connect/blob/master/lib/middleware/router.js

如果您有两个执行相同操作的路由,您可以执行以下操作以使其保持DRY

代码语言:javascript
复制
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);
票数 121
EN

Stack Overflow用户

发布于 2016-10-06 19:53:57

在数组中,您还可以使用传递给req.params的变量:

代码语言:javascript
复制
app.get(["/:foo", "/:foo/:bar"], /* function */);
票数 11
EN

Stack Overflow用户

发布于 2016-12-04 01:48:05

对于那些正在学习node/express的人(就像我一样):如果可能的话,不要使用通配符路由!

我还想使用通配符路由实现GET /users/:id/任何内容的路由。这就是我来这里的原因。

更多信息:https://blog.praveen.science/wildcard-routing-is-an-anti-pattern/

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6161567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档