使用快递

时间:2016-03-16 06:49:38

标签: node.js http express

拥有express申请和两条路线,如何在访问路线/foo时提供路线/bar

app.get("/foo", (req, res) => res.end("Hello World"));
app.get("/bar", (req, res) => /* ??? */);

我不想使用res.redirect("/foo")重定向,因为这会更改网址。从我看到的connect-middleware会做这项工作,但它太复杂了我所需要的。

我只需要将请求转发到/foo路由,然后将其提供给/bar路径下的客户端。

如何在浏览器中打开/bar时,我会回来"Hello World"

我也不想要正则表达式解决方案。我想要一个这样的函数:res.serveUrl("/foo")

2 个答案:

答案 0 :(得分:1)

您可以简单地创建处理函数并在两个路径中使用它

function handleFooAndBar (req, res, next) {
    res.send('Hello World!');
}

app.get("/foo", handleFooAndBar); 
app.get("/bar", handleFooAndBar);

答案 1 :(得分:1)

您也可以编写自己的“重写”引擎。在此示例中,您只需重写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

访问原始网址

其他人(express-urlrewrite)也已经考虑过这样的中间件。