ctx.search and ctx.request.search
This commit is contained in:
parent
7d9c6ba66c
commit
28ca80758b
5 changed files with 91 additions and 1 deletions
|
@ -243,6 +243,22 @@ module.exports = {
|
|||
this.request.querystring = val;
|
||||
},
|
||||
|
||||
/**
|
||||
* Delegate to Request#search.
|
||||
*/
|
||||
|
||||
get search() {
|
||||
return this.request.search;
|
||||
},
|
||||
|
||||
/**
|
||||
* Delegate to Request#search=.
|
||||
*/
|
||||
|
||||
set search(val) {
|
||||
this.request.search = val;
|
||||
},
|
||||
|
||||
/**
|
||||
* Delegate to Request#host.
|
||||
*/
|
||||
|
|
|
@ -154,6 +154,31 @@ module.exports = {
|
|||
this.url = stringify(url);
|
||||
},
|
||||
|
||||
/**
|
||||
* Get the search string. Same as the querystring
|
||||
* except it includes the leading ?.
|
||||
*
|
||||
* @return {String}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
get search() {
|
||||
if (!this.querystring) return '';
|
||||
return '?' + this.querystring;
|
||||
},
|
||||
|
||||
/**
|
||||
* Set the search string. Same as
|
||||
* response.querystring= but included for ubiquity.
|
||||
*
|
||||
* @param {String} str
|
||||
* @api public
|
||||
*/
|
||||
|
||||
set search(str) {
|
||||
this.querystring = str;
|
||||
},
|
||||
|
||||
/**
|
||||
* Parse the "Host" header field hostname
|
||||
* and support X-Forwarded-Host when a
|
||||
|
|
|
@ -16,11 +16,12 @@ describe('ctx.query', function(){
|
|||
})
|
||||
|
||||
describe('ctx.query=', function(){
|
||||
it('should stringify and replace the querystring', function(){
|
||||
it('should stringify and replace the querystring and search', function(){
|
||||
var ctx = context({ url: '/store/shoes' });
|
||||
ctx.query = { page: 2, color: 'blue' };
|
||||
ctx.url.should.equal('/store/shoes?page=2&color=blue');
|
||||
ctx.querystring.should.equal('page=2&color=blue');
|
||||
ctx.search.should.equal('?page=2&color=blue')
|
||||
})
|
||||
|
||||
it('should change .url but not .originalUrl', function(){
|
||||
|
|
|
@ -9,6 +9,17 @@ describe('ctx.querystring=', function(){
|
|||
ctx.querystring.should.equal('page=2&color=blue');
|
||||
})
|
||||
|
||||
it('should update ctx.search and ctx.query', function(){
|
||||
var ctx = context({ url: '/store/shoes' });
|
||||
ctx.querystring = 'page=2&color=blue';
|
||||
ctx.url.should.equal('/store/shoes?page=2&color=blue');
|
||||
ctx.search.should.equal('?page=2&color=blue');
|
||||
ctx.query.should.eql({
|
||||
page: '2',
|
||||
color: 'blue'
|
||||
});
|
||||
})
|
||||
|
||||
it('should change .url but not .originalUrl', function(){
|
||||
var ctx = context({ url: '/store/shoes' });
|
||||
ctx.querystring = 'page=2&color=blue';
|
||||
|
|
37
test/request/search.js
Normal file
37
test/request/search.js
Normal file
|
@ -0,0 +1,37 @@
|
|||
|
||||
var context = require('../context');
|
||||
|
||||
describe('ctx.search=', function(){
|
||||
it('should replace the search', function(){
|
||||
var ctx = context({ url: '/store/shoes' });
|
||||
ctx.search = '?page=2&color=blue';
|
||||
ctx.url.should.equal('/store/shoes?page=2&color=blue');
|
||||
ctx.search.should.equal('?page=2&color=blue');
|
||||
})
|
||||
|
||||
it('should update ctx.querystring and ctx.query', function(){
|
||||
var ctx = context({ url: '/store/shoes' });
|
||||
ctx.search = '?page=2&color=blue';
|
||||
ctx.url.should.equal('/store/shoes?page=2&color=blue');
|
||||
ctx.querystring.should.equal('page=2&color=blue');
|
||||
ctx.query.should.eql({
|
||||
page: '2',
|
||||
color: 'blue'
|
||||
});
|
||||
})
|
||||
|
||||
it('should change .url but not .originalUrl', function(){
|
||||
var ctx = context({ url: '/store/shoes' });
|
||||
ctx.search = '?page=2&color=blue';
|
||||
ctx.url.should.equal('/store/shoes?page=2&color=blue');
|
||||
ctx.originalUrl.should.equal('/store/shoes');
|
||||
ctx.request.originalUrl.should.equal('/store/shoes');
|
||||
})
|
||||
|
||||
describe('when missing', function(){
|
||||
it('should return ""', function(){
|
||||
var ctx = context({ url: '/store/shoes' });
|
||||
ctx.search.should.equal('');
|
||||
})
|
||||
})
|
||||
})
|
Loading…
Reference in a new issue