mirror of https://github.com/pelias/api.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.5 KiB
43 lines
1.5 KiB
var check = require('check-types'); |
|
|
|
function sendJSONResponse(req, res, next) { |
|
|
|
// do nothing if no result data set |
|
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(statusCode).json(res.body); |
|
} |
|
|
|
module.exports = sendJSONResponse;
|
|
|