【问题标题】:Rewrite url path using node.js使用 node.js 重写 url 路径
【发布时间】:2012-11-19 00:11:37
【问题描述】:

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

我尝试过这样的事情:

req.url = 'foo';

但是网址还是一样的

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    当然,只需添加一个中间件函数即可对其进行修改。例如:

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

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

    【讨论】:

    • 我认为它工作正常,但浏览器上的路径仍然相同......是否也可以在用户浏览器上重写 URL 或仅使用 res.redirect ?
    • 如果要在浏览器中修改网址,我认为需要重定向用户。看答案和cmetshere
    • 在 Express 4(可能更早)中,这不再有效。 Request 实例将 req 属性定义为非 writable
    • @PhpMyCoder 您能否添加一个答案,说明如何在更现代的版本中执行此操作?我有一段时间没有使用 express,所以我不知道如何解决这个问题。
    • 原来我看不懂。出于某种原因,当我浏览这个问题时,我读的是req.path 而不是req.urlreq.urlHttp.IncomingMessage 的属性,所以可以设置。你原来的答案是正确的。抱歉!
    【解决方案2】:

    最好也更新path。我的方法建议:

    app.use(function(req, res, next) {
        console.log("request", req.originalUrl);
        const removeOnRoutes = '/not-wanted-route-part';
        req.originalUrl = req.originalUrl.replace(removeOnRoutes,'');
        req.path = req.path.replace(removeOnRoutes,'');
        return next();
    });
    

    这样/not-wanted-route-part/users就会变成/users

    【讨论】:

      【解决方案3】:

      您需要覆盖 req 的一些属性(NodeJs 中的 IncomingMessage):

      • 网址
      • 路径
      • 搜索
      • 查询

      2

      function changeUrl(req, url) {
          const parsedUrl = new URL(url);
          req.url = url;
          req.originalUrl = url;
          req.path = parsedUrl.pathname;
          req.search = parsedUrl.search;
          req._parsedUrl = parsedUrl;
          const query = {};
          for(const entry of parsedUrl.searchParams) {
              query[entry[0]] = entry[1];
          }
          req.query = query;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-08
        • 2019-08-27
        • 2018-09-06
        • 1970-01-01
        • 2011-10-20
        相关资源
        最近更新 更多