当请求在Heroku上访问我们的Express应用程序时,Express中的req对象不再像浏览器发送的原始请求,而是从Heroku的负载均衡器发送到我们的应用程序的请求。
我需要访问命中负载均衡器的原始请求的属性。我该如何处理Heroku?
下面是一些我尝试过的例子,所有这些都是错误的——协议应该是
https
域应该是例如。
example.com
:
req.protocol
http
req.headers['X-Forwarded-Proto']
http
req.hostname
:shelted-storm-123.herokuspace.com
req.headers.host
:shelted-storm-123.herokuspace.com
req.header('host')
:shelted-storm-123.herokuspace.com
req.headers['X-Forwarded-Host']
:未定义
我要做的是始终使用WWW版本的URL,并重定向例如。
http://example.com/my-page
到
http://www.example.com/my-page
确切的代码(Express中间件)是:
export default function redirectWww(req, res, next) {
var host = req.header('host')
if (host.match(/^www\..*/i)) {
next()
} else {
res.redirect(301, `${req.protocol}://www.${host}${req.originalUrl}`)
}
}