我正在使用current 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);
如果我打开“http://localhost:8000/test”,我得到正确的输出“toplevel”,调试输出打印“request to / toplevel”。不幸的是,它不适用于“http://localhost:8000/myrouter/test”。调试输出打印“请求/ myrouter / toplevel”,我得到默认快速404处理程序的结果。
是否可以将请求从“/ myrouter / test”重定向到“/ toplevel”而无需重定向客户端(即res.redirect()
)?