Node.js 使用express提供特定url

Node.js 使用express提供特定url,node.js,http,express,Node.js,Http,Express,有一个express应用程序和两条路线,当访问路线/bar时,如何为路线/foo提供服务 app.get("/foo", (req, res) => res.end("Hello World")); app.get("/bar", (req, res) => /* ??? */); 我不想使用res.redirect(“/foo”)重定向,因为这样会更改url。从我所看到的情况来看,我可以做这项工作,但它太复杂了,无法满足我的需要 我只需要将请求转发到/foo路由,然后通过/bar

有一个
express
应用程序和两条路线,当访问路线
/bar
时,如何为路线
/foo
提供服务

app.get("/foo", (req, res) => res.end("Hello World"));
app.get("/bar", (req, res) => /* ??? */);
我不想使用
res.redirect(“/foo”)
重定向,因为这样会更改url。从我所看到的情况来看,我可以做这项工作,但它太复杂了,无法满足我的需要

我只需要将请求转发到
/foo
路由,然后通过
/bar
路由将其送达客户端

我如何才能做到这一点,例如当我在浏览器中打开
/bar
时,我将返回
“Hello World”


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

您只需创建处理函数并在两个路径中使用它

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

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

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


其他人()也已经想到了这样的中间件。

这是另一种解决方案,但我真的想在请求路由时提供另一条路由。您所说的提供另一条路由是什么意思?我的解决方案将为/bar和/foo提供“Hello World!”。这不是您想要的吗?我知道这会起作用,但我需要的是将请求转发到另一个路由,并将响应发送到请求的路由,而不需要为响应提供服务的函数引用。我需要类似于
serverponse(req,res,“/myurl to service”)
的东西。该url在handleFooAndBar和req.url中可用,因此它与您的ServerResponseyes完全相同,但假设在另一个文件中我有
app.get(“/bar”,…)
,在这里我想提供一个随机路由,而不需要引用该函数。