从Express响应获取原始请求URL

时间:2019-08-21 20:35:24

标签: express

是否有一种简便的方法可以从Express response对象中检索原始请求URL?

使用request对象,我可以做类似的事情:

getFullUrl(req) {
    return url.format({
        host: environment.getHost(req),
        pathname: req.originalUrl,
        protocol: req.protocol
    });
}

我想知道我是否可以对response做类似的事情?看起来href属性为我提供了我所需要的,但想得到更多的想法。

1 个答案:

答案 0 :(得分:1)

您可以访问res.req以从request对象获取response对象,以便随后可以使用与request对象相同的逻辑。

我找不到任何记录在案的地方,但是您可以在console.log()或调试器中看到它-在那里。因此,请谨慎行事,因为可能无法保证这种情况永远不会改变。

res.reqreq.res似乎都是Express特有的请求和响应对象。您可以在Express的默认早期中间件处理程序中看到为他们分配了here in the source

/**
 * Initialization middleware, exposing the
 * request and response to each other, as well
 * as defaulting the X-Powered-By header field.
 *
 * @param {Function} app
 * @return {Function}
 * @api private
 */

exports.init = function(app){
  return function expressInit(req, res, next){
    if (app.enabled('x-powered-by')) res.setHeader('X-Powered-By', 'Express');
    req.res = res;
    res.req = req;
    req.next = next;

    setPrototypeOf(req, app.request)
    setPrototypeOf(res, app.response)

    res.locals = res.locals || Object.create(null);

    next();
  };
};

尽管它们似乎没有记录在案,但Express的内部结构在所有地方都依赖它们。仅查看response.js file from the Express repository,在Express内部就有res.req的各种用法。因此,如果他们将来要删除它,则必须更改许多自己的代码才能这样做。我想说它似乎相对安全。