add request.hostname(getter), fixed #224
make request.host and request.hostname work as node url lib http://nodejs.org/api/url.html#url_url this commit will change older request.host(getter)
This commit is contained in:
parent
e8d3a37e9e
commit
72a9b69146
4 changed files with 53 additions and 6 deletions
|
@ -179,6 +179,7 @@ delegate(proto, 'request')
|
||||||
.access('url')
|
.access('url')
|
||||||
.getter('subdomains')
|
.getter('subdomains')
|
||||||
.getter('protocol')
|
.getter('protocol')
|
||||||
|
.getter('hostname')
|
||||||
.getter('header')
|
.getter('header')
|
||||||
.getter('secure')
|
.getter('secure')
|
||||||
.getter('stale')
|
.getter('stale')
|
||||||
|
|
|
@ -173,11 +173,11 @@ module.exports = {
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse the "Host" header field hostname
|
* Parse the "Host" header field host
|
||||||
* and support X-Forwarded-Host when a
|
* and support X-Forwarded-Host when a
|
||||||
* proxy is enabled.
|
* proxy is enabled.
|
||||||
*
|
*
|
||||||
* @return {String}
|
* @return {String} hostname:port
|
||||||
* @api public
|
* @api public
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -186,7 +186,7 @@ module.exports = {
|
||||||
var host = proxy && this.get('X-Forwarded-Host');
|
var host = proxy && this.get('X-Forwarded-Host');
|
||||||
host = host || this.get('Host');
|
host = host || this.get('Host');
|
||||||
if (!host) return;
|
if (!host) return;
|
||||||
return host.split(/\s*,\s*/)[0].split(':')[0];
|
return host.split(/\s*,\s*/)[0];
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -200,6 +200,21 @@ module.exports = {
|
||||||
this.req.headers.host = val;
|
this.req.headers.host = val;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse the "Host" header field hostname
|
||||||
|
* and support X-Forwarded-Host when a
|
||||||
|
* proxy is enabled.
|
||||||
|
*
|
||||||
|
* @return {String} hostname
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
get hostname() {
|
||||||
|
var host = this.host;
|
||||||
|
if (!host) return;
|
||||||
|
return host.split(':')[0];
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the request is fresh, aka
|
* Check if the request is fresh, aka
|
||||||
* Last-Modified and/or the ETag
|
* Last-Modified and/or the ETag
|
||||||
|
|
|
@ -2,10 +2,10 @@
|
||||||
var request = require('../context').request;
|
var request = require('../context').request;
|
||||||
|
|
||||||
describe('req.host', function(){
|
describe('req.host', function(){
|
||||||
it('should return host void of port', function(){
|
it('should return host with port', function(){
|
||||||
var req = request();
|
var req = request();
|
||||||
req.header.host = 'foo.com:3000';
|
req.header.host = 'foo.com:3000';
|
||||||
req.host.should.equal('foo.com');
|
req.host.should.equal('foo.com:3000');
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('when X-Forwarded-Host is present', function(){
|
describe('when X-Forwarded-Host is present', function(){
|
||||||
|
|
31
test/request/hostname.js
Normal file
31
test/request/hostname.js
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
|
||||||
|
var request = require('../context').request;
|
||||||
|
|
||||||
|
describe('req.hostname', function(){
|
||||||
|
it('should return hostname void of port', function(){
|
||||||
|
var req = request();
|
||||||
|
req.header.host = 'foo.com:3000';
|
||||||
|
req.hostname.should.equal('foo.com');
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('when X-Forwarded-Host is present', function(){
|
||||||
|
describe('and proxy is not trusted', function(){
|
||||||
|
it('should be ignored', function(){
|
||||||
|
var req = request();
|
||||||
|
req.header['x-forwarded-host'] = 'bar.com';
|
||||||
|
req.header['host'] = 'foo.com';
|
||||||
|
req.hostname.should.equal('foo.com')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('and proxy is trusted', function(){
|
||||||
|
it('should be used', function(){
|
||||||
|
var req = request();
|
||||||
|
req.app.proxy = true;
|
||||||
|
req.header['x-forwarded-host'] = 'bar.com, baz.com';
|
||||||
|
req.header['host'] = 'foo.com';
|
||||||
|
req.hostname.should.equal('bar.com')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
Loading…
Reference in a new issue