使用node.js重写url路径

Raf*_*tta 13 node.js express

是否可以使用node.js重写URL路径?(我也使用Express 3.0)

我尝试过这样的事情:

req.url = 'foo';
Run Code Online (Sandbox Code Playgroud)

但网址继续相同

Dav*_*don 36

当然,只需添加一个中间件功能来修改它.例如:

app.use(function(req, res, next) {
  if (req.url.slice(-1) === '/') {
    req.url = req.url.slice(0, -1);
  }
  next();
});
Run Code Online (Sandbox Code Playgroud)

此函数从所有传入请求URL中删除尾部斜杠.请注意,为了使其正常工作,您需要在调用之前将其放置app.use(app.router).

  • 如果要在浏览器中修改URL,我认为您需要重定向用户.请参阅答案和评论[此处](http://stackoverflow.com/questions/13442377/redirect-all-trailing-slashes-gloablly-in-express/). (4认同)
  • 在Express 4(甚至更早)中,这不再起作用。“请求”实例将“ req”属性定义为“不可写”。 (4认同)
  • 事实证明我无法阅读.出于某种原因,当我浏览这个问题时,我读到了`req.path`而不是`req.url`.`req.url`是`Http.IncomingMessage`的属性,因此可以设置它.你的原始答案是正确的.我很抱歉! (4认同)
  • 我认为它工作正常,但浏览器上的路径仍然相同......是否也可以在用户浏览器上重写 URL 或仅使用 res.redirect ? (3认同)
  • @PhpMyCoder您可以添加一个答案来显示如何在更现代的版本中执行此操作吗?我已经有一段时间没有使用Express了,所以我不确定如何解决这个问题。 (2认同)
  • 特别是在删除结尾斜杠方面,如果 URL 具有需要保留的查询字符串,我认为此解决方案不起作用。对于该用例,请考虑检查 [`req.path`](http://expressjs.com/en/api.html#req.path) 并使用修改后的路径 + 查询字符串重建 URL。 (2认同)