拥有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")
。
答案 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)也已经考虑过这样的中间件。