mirror of https://github.com/pelias/api.git
Peter Johnson
9 years ago
48 changed files with 99 additions and 84 deletions
@ -1,15 +0,0 @@
|
||||
|
||||
// handle time out errors
|
||||
function middleware(err, req, res, next) { |
||||
res.header('Cache-Control','public'); |
||||
var error = (err && err.message) ? err.message : err; |
||||
|
||||
if( res.statusCode === 408 || (error.toLowerCase().indexOf('request timeout') !== -1) ){
|
||||
res.status(408);
|
||||
res.json({ error: typeof error === 'string' ? error : 'request timeout' }); |
||||
} else { |
||||
next(err); |
||||
} |
||||
} |
||||
|
||||
module.exports = middleware; |
@ -1,12 +1,43 @@
|
||||
var check = require('check-types'); |
||||
|
||||
function sendJSONResponse(req, res, next) { |
||||
|
||||
// do nothing if no result data set
|
||||
if (!res || !res.body) { |
||||
if (!res || !check.object(res.body) || !check.object(res.body.geocoding)) { |
||||
return next(); |
||||
} |
||||
|
||||
// default status
|
||||
var statusCode = 200; |
||||
|
||||
// vary status code whenever an error was reported
|
||||
var geocoding = res.body.geocoding; |
||||
if( check.array( geocoding.errors ) && geocoding.errors.length ){ |
||||
|
||||
// default status for errors is 400 Bad Request
|
||||
statusCode = 400; // 400 Bad Request
|
||||
|
||||
// iterate over all reported errors
|
||||
geocoding.errors.forEach( function( err ){ |
||||
// custom status codes for instances of the Error() object.
|
||||
if( err instanceof Error ){ |
||||
// we can extract the error type from the constructor name
|
||||
switch( err.constructor.name ){ |
||||
// elasticsearch errors
|
||||
// see: https://github.com/elastic/elasticsearch-js/blob/master/src/lib/errors.js
|
||||
case 'RequestTimeout': statusCode = 408; break; // 408 Request Timeout
|
||||
case 'NoConnections': statusCode = 502; break; // 502 Bad Gateway
|
||||
case 'ConnectionFault': statusCode = 502; break; // 502 Bad Gateway
|
||||
case 'Serialization': statusCode = 500; break; // 500 Internal Server Error
|
||||
case 'Generic': statusCode = 500; break; // 500 Internal Server Error
|
||||
default: statusCode = 500; // 500 Internal Server Error
|
||||
} |
||||
} |
||||
}); |
||||
} |
||||
|
||||
// respond
|
||||
return res.status(200).json(res.body); |
||||
return res.status(statusCode).json(res.body); |
||||
} |
||||
|
||||
module.exports = sendJSONResponse; |
Loading…
Reference in new issue