使用快递服务特定的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);