set length on body override

This commit is contained in:
Jonathan Ong 2013-10-04 00:08:47 -07:00
parent 4aa75a1164
commit 0e829c17ad
2 changed files with 28 additions and 6 deletions

View file

@ -163,31 +163,31 @@ module.exports = {
return;
}
// content-type already set
if (this.responseHeader['content-type']) return;
// set the content-type only if not yet set
var setType = !this.responseHeader['content-type'];
// string
if ('string' == typeof val) {
this.type = ~val.indexOf('<') ? 'html' : 'text';
if (setType) this.type = ~val.indexOf('<') ? 'html' : 'text';
this.length = Buffer.byteLength(val);
return;
}
// buffer
if (Buffer.isBuffer(val)) {
this.type = 'bin';
if (setType) this.type = 'bin';
this.length = val.length;
return;
}
// stream
if (val instanceof Stream) {
this.type = 'bin';
if (setType) this.type = 'bin';
return;
}
// json
this.type = 'json';
if (setType) this.type = 'json';
},
/**

View file

@ -29,6 +29,13 @@ describe('ctx.body=', function(){
ctx.body = new Buffer('something');
assert('image/png' == ctx.responseHeader['content-type']);
})
it('should override length', function(){
var ctx = context();
ctx.type = 'html';
ctx.body = 'something';
assert.equal(ctx.responseLength, 9);
})
})
describe('when a string is given', function(){
@ -51,6 +58,21 @@ describe('ctx.body=', function(){
ctx.body = '<h1>Tobi</h1>';
assert('text/html; charset=utf-8' == ctx.responseHeader['content-type']);
})
it('should set length', function(){
var string = '<h1>Tobi</h1>';
var ctx = context();
ctx.body = string;
assert.equal(ctx.responseLength, Buffer.byteLength(string));
})
it('should set length when body is override', function(){
var string = '<h1>Tobi</h1>';
var ctx = context();
ctx.body = string;
ctx.body = string + string;
assert.equal(ctx.responseLength, 2 * Buffer.byteLength(string));
})
})
describe('when a stream is given', function(){