使用快递服务特定的url
有一个express
应用程序和两个路线,当访问路线/bar
时,我该如何服务路线/foo
?
app.get("/foo", (req, res) => res.end("Hello World")); app.get("/bar", (req, res) => /* ??? */);
我不想使用res.redirect("/foo")
redirect,因为这将改变url。 从我看到的connect-middleware
可以完成这项工作,但是对于我所需要的,它太复杂了。
我只需要将请求转发到/foo
路由,并将其提供给/bar
路由下的客户端。
我怎样才能做到这一点,如当我打开/bar
浏览器中,我会回来"Hello World"
?
我也不想要一个正则expression式的解决scheme。 我想要一个像这样的函数: res.serveUrl("/foo")
。
你也可以写你自己的“重写”引擎。 在这个例子中,您只需重写URL并使用next()
即可到达所需的处理程序:
var express = require('express'); var app = express(); app.get('/foo', function (req, res, next) { req.url = '/bar'; return next(); }); app.get('/bar', function (req, res) { console.dir(req.url); // /bar console.dir(req.originalUrl); // /foo console.dir(req.path); // /bar console.dir(req.route.path); // /bar res.send('Hello bar!'); }); app.listen(3000, function () { console.log('Example app listening on port 3000!'); });
您仍然可以使用req.originalUrl
访问原始url
其他人( express-urlrewrite )也已经想到了这样的中间件。
您可以简单地创build处理函数并在两个path中使用它
function handleFooAndBar (req, res, next) { res.send('Hello World!'); } app.get("/foo", handleFooAndBar); app.get("/bar", handleFooAndBar);