18

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

我试过这样的事情:

req.url = 'foo';

但网址继续相同

4

3 回答 3

44

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

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

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

于 2012-11-19T00:26:02.840 回答
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

于 2019-08-08T17:56:37.487 回答
1

您需要覆盖 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;
}
于 2020-10-24T11:53:00.120 回答