我在很多 SO 帖子中发现,为了在 Express 4 中重写 URL,我会执行如下操作:
router.use('/one/:someId', (req, res, next) => {
req.url = `/two/${req.params.someId}`;
next();
});
router.get('/one/:someId', (req, res) => {
res.send("reached /one/:someId");
});
router.get('/two/:someId', (req, res) => {
res.send("reached /two/:someId");
});
但是当我尝试这样做时,URL 不仅没有更改为我预期的“/two/某个整数”,而且仍然是“/one/某个整数” “但它到达了我在应用程序文件中设置的 404 - 未找到页面。
此路由位于路由器文件中,我也尝试将 URL 设置为:
req.url = `/routerPath/two/${req.params.someId}`;
但是结果是完全一样的。
那么我可能会错过什么?
谢谢。
最佳答案
您必须区分两种重定向:
- 内部重定向在服务器上进行,客户端不会注意到。它们为您的服务器编程提供了便利,但并不是必需的 - 您始终可以引入一个由所有端点调用的辅助方法。
- HTTP 重定向建议客户端(例如网络浏览器)转到不同的 URL。由于您希望 URL 发生变化,因此这就是您想要的。
只需调用 res.redirect
,确保对特殊字符进行编码:
router.get('/one/:someId', (req, res) => {
res.redirect(`/two/${encodeURIComponent(req.params.someId)}`);
});
router.get('/two/:someId', (req, res) => {
res.render("reached /two/:someId");
});
关于javascript - URL 重写在 Express 4.14.1 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43129067/