Javascript node.js&;快速:路由器内部请求的内部重定向

Javascript node.js&;快速:路由器内部请求的内部重定向,javascript,node.js,express,Javascript,Node.js,Express,我正在使用当前的express 4和node.js 6.x。在我的web应用程序中,我需要执行内部重定向(即从一个路由处理程序重定向到另一个路由处理程序,而不向客户端发送重定向)。这在toplevel express内或同一路由器内有效,但如果源请求位于路由器中则不起作用 请参阅以下最小工作示例: const express = require("express"); const app = module.exports.app = express(); const router = new e

我正在使用当前的express 4和node.js 6.x。在我的web应用程序中,我需要执行内部重定向(即从一个路由处理程序重定向到另一个路由处理程序,而不向客户端发送重定向)。这在toplevel express内或同一路由器内有效,但如果源请求位于路由器中则不起作用

请参阅以下最小工作示例:

const express = require("express");
const app = module.exports.app = express();
const router = new express.Router();

app.use("/myrouter", router);

// not working
router.get("/test", (req, res, next) => {
  req.url = "/toplevel";
  next();
});

// working
app.get("/test", (req, res, next) => {
    req.url = "/toplevel";
    next();
});

// debug output
app.use((req, res, next) => {
  console.log(`request to ${req.url}`);
  next();
});

app.get("/toplevel", (req, res) => {
  res.end("toplevel");
});

app.listen(8000);
如果我打开“”,我将获得正确的输出“toplevel”,调试输出将打印“request to/toplevel”。不幸的是,它对“”不起作用。调试输出打印“request to/myrouter/toplevel”,我得到默认的express404处理程序的结果


是否可以在不重定向客户端的情况下将请求从“/myrouter/test”重定向到“/toplevel”(即
res.redirect()
)?

我认为这是不可能的。它看起来像Express将路由器视为一个独立的应用程序,并且重写
req.url
总是在该应用程序的上下文中完成(也就是说,Express将装载路径附加到
/myrouter
,在本例中是
req.url
,如果您对其进行更改,请在内部对其进行更改)。尝试更改
req.originalUrl
@ponury kostek我也尝试过这样做,似乎什么也没做。