Merge pull request #86 from koajs/etag-lastmodified
response.etag and response.lastModified
This commit is contained in:
commit
12dda03b83
3 changed files with 110 additions and 0 deletions
|
@ -295,6 +295,61 @@ Response.prototype = {
|
||||||
this.set('Content-Type', type);
|
this.set('Content-Type', type);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the Last-Modified date using a string or a Date.
|
||||||
|
*
|
||||||
|
* this.response.lastModified = new Date();
|
||||||
|
* this.response.lastModified = '2013-09-13';
|
||||||
|
*
|
||||||
|
* @param {String|Date} type
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
set lastModified(val) {
|
||||||
|
if ('string' == typeof val) val = new Date(val);
|
||||||
|
this.set('Last-Modified', val.toUTCString());
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Last-Modified date in Date form, if it exists.
|
||||||
|
*
|
||||||
|
* @return {Date}
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
get lastModified() {
|
||||||
|
var date = this.get('last-modified');
|
||||||
|
if (date) return new Date(date);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the ETag of a response.
|
||||||
|
* This will normalize the quotes if necessary.
|
||||||
|
*
|
||||||
|
* this.response.etag = 'md5hashsum';
|
||||||
|
* this.response.etag = '"md5hashsum"';
|
||||||
|
* this.response.etag = 'W/"123456789"';
|
||||||
|
*
|
||||||
|
* @param {String} etag
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
set etag(val) {
|
||||||
|
if (!/^(W\/)?".*"$/.test(val)) val = '"' + val + '"';
|
||||||
|
this.set('ETag', val);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the ETag of a response.
|
||||||
|
*
|
||||||
|
* @return {String}
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
get etag() {
|
||||||
|
return this.get('etag');
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the request mime type void of
|
* Return the request mime type void of
|
||||||
* parameters such as "charset".
|
* parameters such as "charset".
|
||||||
|
|
28
test/response/etag.js
Normal file
28
test/response/etag.js
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
|
||||||
|
var response = require('../response');
|
||||||
|
|
||||||
|
describe('res.etag', function(){
|
||||||
|
it('should not modify an etag with quotes', function(){
|
||||||
|
var res = response();
|
||||||
|
res.etag = '"asdf"';
|
||||||
|
res.header.etag.should.equal('"asdf"');
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not modify a weak etag', function(){
|
||||||
|
var res = response();
|
||||||
|
res.etag = 'W/"asdf"';
|
||||||
|
res.header.etag.should.equal('W/"asdf"');
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should add quotes around an etag if necessary', function(){
|
||||||
|
var res = response();
|
||||||
|
res.etag = 'asdf';
|
||||||
|
res.header.etag.should.equal('"asdf"');
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should get the etag', function(){
|
||||||
|
var res = response();
|
||||||
|
res.set('etag', '"asdf"');
|
||||||
|
res.etag.should.equal('"asdf"');
|
||||||
|
})
|
||||||
|
})
|
27
test/response/last-modified.js
Normal file
27
test/response/last-modified.js
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
|
||||||
|
var response = require('../response');
|
||||||
|
|
||||||
|
describe('res.lastModified', function(){
|
||||||
|
it('should set the header as a UTCString', function(){
|
||||||
|
var res = response();
|
||||||
|
var date = new Date();
|
||||||
|
res.lastModified = date;
|
||||||
|
res.header['last-modified'].should.equal(date.toUTCString());
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should work with date strings', function(){
|
||||||
|
var res = response();
|
||||||
|
var date = new Date();
|
||||||
|
res.lastModified = date.toString();
|
||||||
|
res.header['last-modified'].should.equal(date.toUTCString());
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should get the header as a Date', function(){
|
||||||
|
// Note: Date() removes milliseconds, but it's practically important.
|
||||||
|
var res = response();
|
||||||
|
var date = new Date();
|
||||||
|
res.lastModified = date;
|
||||||
|
(res.lastModified.getTime() / 1000)
|
||||||
|
.should.equal(Math.floor(date.getTime() / 1000));
|
||||||
|
})
|
||||||
|
})
|
Loading…
Reference in a new issue