11

我正在尝试制作一个用于处理 url 别名的中间件,我现在正在做的是:

// [...]
module.exports = function() {

  return function(req, res, next) {
    // getAlias would get an object {alias:"alias/path",source:"/real/path"} or null
    var alias = getAlias(req.url);
    if(alias) {
        req.url = alias.source;
    }
    next();
  };

};

因此,基本上我正在商店中寻找请求的 url,如果发现它作为别名,我将 request.url 更改为该别名的源路径,以便 express 调用正确的路由。

问题是 request.url 和 request.path 具有相同的值,但是在 request.url 有效时更改 request.path 不起作用。此外,我不确定我必须再次测试哪一个。

当我与 request.url 交互时一切正常,但只是想确保我以正确的方式进行操作。

有什么想法吗 ?

4

2 回答 2

13

重写req.url属性是内部重新路由请求的正确方法。这就是为什么req.originalUrl在确实更改原始 URL 的情况下存在一种情况。

这就是 Express 文档的说明req.originalUrl

这个属性很像req.url,但是它保留了原始的请求 url,允许您req.url出于内部路由目的自由重写。

req.url属性未记录在案,但从上面的陈述中您可以推断出它是按照您解释的方式使用的。在某些 Express 测试中也以这种方式使用它。

于 2013-09-29T15:31:15.483 回答
0

您可以run-middleware完全使用模块。只需使用 URL & 方法 & 数据运行您想要的处理程序。

https://www.npmjs.com/package/run-middleware

例如:

module.exports = function() {

  return function(req, res, next) {
    // getAlias would get an object {alias:"alias/path",source:"/real/path"} or null
    var alias = getAlias(req.url);
    if(alias) {
        res.runMiddleware(alias,(status,data)=>(res.status(status).send(data))
    }
    next();
  };

};
于 2016-09-15T09:24:13.057 回答