Merge branch 'master' into res-locals-user

This commit is contained in:
Simon Martín
2017-11-16 11:03:43 +01:00
7 changed files with 95 additions and 19 deletions
+7 -3
View File
@@ -4,6 +4,7 @@ var step = require('step');
var cors = require('../middleware/cors');
var userMiddleware = require('../middleware/user');
var allowQueryParams = require('../middleware/allow-query-params');
var vectorError = require('../middleware/vector-error');
var DataviewBackend = require('../backends/dataview');
var AnalysisStatusBackend = require('../backends/analysis-status');
@@ -50,7 +51,8 @@ LayergroupController.prototype.register = function(app) {
cors(),
userMiddleware,
this.prepareContext,
this.tile.bind(this)
this.tile.bind(this),
vectorError()
);
app.get(
@@ -58,7 +60,8 @@ LayergroupController.prototype.register = function(app) {
cors(),
userMiddleware,
this.prepareContext,
this.tile.bind(this)
this.tile.bind(this),
vectorError()
);
app.get(
@@ -67,7 +70,8 @@ LayergroupController.prototype.register = function(app) {
userMiddleware,
validateLayerRouteMiddleware,
this.prepareContext,
this.layer.bind(this)
this.layer.bind(this),
vectorError()
);
app.get(
+4 -1
View File
@@ -6,6 +6,7 @@ var NamedMapsCacheEntry = require('../cache/model/named_maps_entry');
var cors = require('../middleware/cors');
var userMiddleware = require('../middleware/user');
var allowQueryParams = require('../middleware/allow-query-params');
var vectorError = require('../middleware/vector-error');
function NamedMapsController(prepareContext, namedMapProviderCache, tileBackend, previewBackend,
surrogateKeysCache, tablesExtentApi, metadataBackend) {
@@ -26,7 +27,8 @@ NamedMapsController.prototype.register = function(app) {
cors(),
userMiddleware,
this.prepareContext,
this.tile.bind(this)
this.tile.bind(this),
vectorError()
);
app.get(
@@ -102,6 +104,7 @@ NamedMapsController.prototype.tile = function(req, res, next) {
},
function handleImage(err, tile, headers, stats) {
req.profiler.add(stats);
if (err) {
err.label = 'NAMED_MAP_TILE';
next(err);
+30
View File
@@ -0,0 +1,30 @@
const fs = require('fs');
const timeoutErrorVectorTile = fs.readFileSync(__dirname + '/../../../assets/render-timeout-fallback.mvt');
module.exports = function vectorError() {
return function vectorErrorMiddleware(err, req, res, next) {
if(req.params.format === 'mvt') {
if (isTimeoutError(err)) {
res.set('Content-Type', 'application/x-protobuf');
return res.status(429).send(timeoutErrorVectorTile);
}
}
next(err);
};
};
function isRenderTimeoutError (err) {
return err.message === 'Render timed out';
}
function isDatasourceTimeoutError (err) {
return err.message && err.message.match(/canceling statement due to statement timeout/i);
}
function isTimeoutError (err) {
return isRenderTimeoutError(err) || isDatasourceTimeoutError(err);
}