node.js 和express:路由器内部请求的内部重定向

muf*_*fel 5 javascript node.js express

我正在使用当前的express 4和node.js 6.x。在我的 Web 应用程序中,我需要执行内部重定向(即从一个路由处理程序重定向到另一个路由处理程序,而不向客户端发送重定向)。这在顶级 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);
Run Code Online (Sandbox Code Playgroud)

如果我打开“ http://localhost:8000/test ”,我会得到正确的输出“toplevel”,并且调试输出会打印“request to /toplevel”。不幸的是,它不适用于“ http://localhost:8000/myrouter/test ”。调试输出打印“request to /myrouter/toplevel”,我得到默认的express 404处理程序的结果。

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