是否有一种简便的方法可以从Express response
对象中检索原始请求URL?
使用request
对象,我可以做类似的事情:
getFullUrl(req) {
return url.format({
host: environment.getHost(req),
pathname: req.originalUrl,
protocol: req.protocol
});
}
我想知道我是否可以对response
做类似的事情?看起来href
属性为我提供了我所需要的,但想得到更多的想法。
答案 0 :(得分:1)
您可以访问res.req
以从request
对象获取response
对象,以便随后可以使用与request
对象相同的逻辑。
我找不到任何记录在案的地方,但是您可以在console.log()
或调试器中看到它-在那里。因此,请谨慎行事,因为可能无法保证这种情况永远不会改变。
res.req
和req.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
的各种用法。因此,如果他们将来要删除它,则必须更改许多自己的代码才能这样做。我想说它似乎相对安全。