ctx.redirect(): only set status code if not already a valid redirect status code
specifically 3xx codes except for 304. closes #66
This commit is contained in:
parent
22c035bbea
commit
ee6dce83af
2 changed files with 25 additions and 1 deletions
|
@ -788,7 +788,7 @@ Context.prototype = {
|
||||||
redirect: function(url, alt){
|
redirect: function(url, alt){
|
||||||
if ('back' == url) url = this.get('Referrer') || alt || '/';
|
if ('back' == url) url = this.get('Referrer') || alt || '/';
|
||||||
this.set('Location', url);
|
this.set('Location', url);
|
||||||
this.status = 302;
|
if (!~[300, 301, 302, 303, 305, 307].indexOf(this.status)) this.status = 302;
|
||||||
|
|
||||||
// html
|
// html
|
||||||
if (this.accepts('html')) {
|
if (this.accepts('html')) {
|
||||||
|
|
|
@ -849,6 +849,30 @@ describe('ctx.redirect(url)', function(){
|
||||||
ctx.body.should.equal('Redirecting to ' + url + '.');
|
ctx.body.should.equal('Redirecting to ' + url + '.');
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('when status is 301', function(){
|
||||||
|
it('should not change the status code', function(){
|
||||||
|
var ctx = context();
|
||||||
|
var url = 'http://google.com';
|
||||||
|
ctx.status = 301;
|
||||||
|
ctx.header.accept = 'text/plain';
|
||||||
|
ctx.redirect('http://google.com');
|
||||||
|
ctx.status.should.equal(301);
|
||||||
|
ctx.body.should.equal('Redirecting to ' + url + '.');
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('when status is 304', function(){
|
||||||
|
it('should change the status code', function(){
|
||||||
|
var ctx = context();
|
||||||
|
var url = 'http://google.com';
|
||||||
|
ctx.status = 304;
|
||||||
|
ctx.header.accept = 'text/plain';
|
||||||
|
ctx.redirect('http://google.com');
|
||||||
|
ctx.status.should.equal(302);
|
||||||
|
ctx.body.should.equal('Redirecting to ' + url + '.');
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
function escape(html) {
|
function escape(html) {
|
||||||
|
|
Loading…
Reference in a new issue