我试图让一条路线涵盖/foo包括/foo自身在内的所有事物。我试过将/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*哪个当然不是最佳选择,因为它匹配得太多了。
/fo*
我认为您将必须有2条路线。如果查看连接路由器的第331行,则路径中的*将替换为。+,因此将匹配1个或多个字符。
https://github.com/senchalabs/connect/blob/master/lib/middleware/router.js
如果您有2条路由执行相同的操作,则可以执行以下操作以使其保持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);