URL重写在Express 4.14.1中不起作用

时间:2017-03-30 21:55:36

标签: javascript express

我在很多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 - Not Found页面。

此路由位于路由器文件中,我也尝试将URL设置为:

req.url = `/routerPath/two/${req.params.someId}`;

但结果完全一样。

那么我还能错过什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

您必须区分两种重定向:

  • 内部重定向在服务器上工作,客户端没有注意到。它们为您的服务器编程提供了便利,而且从来没有必要 - 您可以随时引入一个被所有端点调用的辅助方法。
  • HTTP重定向建议客户端(例如Web浏览器)转到其他URL。由于您希望更改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");
});