From 41d42ad32e799aae1faa8ebc05eb94a5632f47b6 Mon Sep 17 00:00:00 2001 From: Ian Ward Date: Mon, 6 Feb 2012 10:40:27 -0500 Subject: [PATCH 1/5] last-modified header should be in rfc2822 format --- lib/mbtiles.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mbtiles.js b/lib/mbtiles.js index b5080d5..cc22684 100644 --- a/lib/mbtiles.js +++ b/lib/mbtiles.js @@ -174,7 +174,7 @@ MBTiles.prototype.getTile = function(z, x, y, callback) { } else { var options = { 'Content-Type': MBTiles.utils.getMimeType(row.tile_data), - 'Last-Modified': mbtiles._stat.mtime, + 'Last-Modified': new Date(mbtiles._stat.mtime).toUTCString(), 'ETag': mbtiles._stat.size + '-' + Number(mbtiles._stat.mtime) }; return callback(null, row.tile_data, options); From db5fc04e0d6dad84dafc7f4dac120e80803f000c Mon Sep 17 00:00:00 2001 From: Ian Ward Date: Mon, 6 Feb 2012 11:42:04 -0500 Subject: [PATCH 2/5] send content-type, last-modified, etag headers w/ grids, not just tiles --- lib/mbtiles.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/mbtiles.js b/lib/mbtiles.js index cc22684..2bd53b5 100644 --- a/lib/mbtiles.js +++ b/lib/mbtiles.js @@ -229,8 +229,12 @@ MBTiles.prototype.getGrid = function(z, x, y, callback) { } catch (err) { return callback(new Error('Grid is invalid')); } - - callback(null, result); + var options = { + 'Content-Type': 'text/javascript', + 'Last-Modified': new Date(that._stat.mtime).toUTCString(), + 'ETag': that._stat.size + '-' + Number(that._stat.mtime) + }; + callback(null, result, options); } ); }; From ca0ea39d34f6901b28e2e856495b8bb6f4570029 Mon Sep 17 00:00:00 2001 From: Young Hahn Date: Mon, 6 Feb 2012 12:09:34 -0500 Subject: [PATCH 3/5] Add tests for Tile, Grid headers. --- test/read.test.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/test/read.test.js b/test/read.test.js index 3ecddc0..52ec187 100644 --- a/test/read.test.js +++ b/test/read.test.js @@ -37,9 +37,12 @@ exports['get tiles'] = function(beforeExit) { if (coords) { // Flip Y coordinate because file names are TMS, but .getTile() expects XYZ. coords[2] = Math.pow(2, coords[3]) - 1 - coords[2]; - mbtiles.getTile(coords[3] | 0, coords[1] | 0, coords[2] | 0, function(err, tile) { + mbtiles.getTile(coords[3] | 0, coords[1] | 0, coords[2] | 0, function(err, tile, headers) { if (err) throw err; assert.deepEqual(tile, fs.readFileSync(__dirname + '/fixtures/images/' + file)); + assert.equal(headers['Content-Type'], 'image/png'); + assert.ok(!isNaN(new Date(headers['Last-Modified']).getTime())); + assert.ok(/\d+-\d+/.test(headers['ETag'])); status.success++; }); } @@ -74,9 +77,12 @@ exports['get grids'] = function(beforeExit) { if (coords) { // Flip Y coordinate because file names are TMS, but .getTile() expects XYZ. coords[2] = Math.pow(2, coords[3]) - 1 - coords[2]; - mbtiles.getGrid(coords[3] | 0, coords[1] | 0, coords[2] | 0, function(err, grid) { + mbtiles.getGrid(coords[3] | 0, coords[1] | 0, coords[2] | 0, function(err, grid, headers) { if (err) throw err; assert.deepEqual(JSON.stringify(grid), fs.readFileSync(__dirname + '/fixtures/grids/' + file, 'utf8')); + assert.equal(headers['Content-Type'], 'text/javascript'); + assert.ok(!isNaN(new Date(headers['Last-Modified']).getTime())); + assert.ok(/\d+-\d+/.test(headers['ETag'])); status.success++; }); } From a2b64d2f236d4a120ba1bc18cad2526c084f9c2c Mon Sep 17 00:00:00 2001 From: Young Hahn Date: Mon, 6 Feb 2012 12:12:11 -0500 Subject: [PATCH 4/5] Better syntax for date parsing. --- test/read.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/read.test.js b/test/read.test.js index 52ec187..ec57212 100644 --- a/test/read.test.js +++ b/test/read.test.js @@ -41,7 +41,7 @@ exports['get tiles'] = function(beforeExit) { if (err) throw err; assert.deepEqual(tile, fs.readFileSync(__dirname + '/fixtures/images/' + file)); assert.equal(headers['Content-Type'], 'image/png'); - assert.ok(!isNaN(new Date(headers['Last-Modified']).getTime())); + assert.ok(!isNaN(Date.parse(headers['Last-Modified']))); assert.ok(/\d+-\d+/.test(headers['ETag'])); status.success++; }); @@ -81,7 +81,7 @@ exports['get grids'] = function(beforeExit) { if (err) throw err; assert.deepEqual(JSON.stringify(grid), fs.readFileSync(__dirname + '/fixtures/grids/' + file, 'utf8')); assert.equal(headers['Content-Type'], 'text/javascript'); - assert.ok(!isNaN(new Date(headers['Last-Modified']).getTime())); + assert.ok(!isNaN(Date.parse(headers['Last-Modified']))); assert.ok(/\d+-\d+/.test(headers['ETag'])); status.success++; }); From 0b85f40edd9389193c20007e1bcf886e3490d06d Mon Sep 17 00:00:00 2001 From: Young Hahn Date: Mon, 6 Feb 2012 12:17:35 -0500 Subject: [PATCH 5/5] 0.1.18 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 435fd32..3cde336 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mbtiles", - "version": "0.1.17", + "version": "0.1.18", "description": "Utilities and tilelive integration for the MBTiles format.", "url": "http://github.com/mapbox/node-mbtiles", "author": {