11const PeliasParameterError = require ( './PeliasParameterError' ) ;
2+ const PeliasTimeoutError = require ( '../sanitizer/PeliasTimeoutError' ) ;
3+
4+ function getCorrectErrorType ( message ) {
5+ if ( message . includes ( 'Timeout' ) ) {
6+ return new PeliasTimeoutError ( message ) ;
7+ }
8+
9+ // most errors are parameter errors
10+ return new PeliasParameterError ( message ) ;
11+ }
12+
13+ // Some Pelias code returns Error objects,
14+ // some returns strings. We want to standardize
15+ // on Error objects here
16+ function ensureInstanceOfError ( error ) {
17+ if ( error instanceof Error ) {
18+ // preserve the message and stack trace of existing Error objecs
19+ const newError = getCorrectErrorType ( error . message ) ;
20+ newError . stack = error . stack ;
21+ return newError ;
22+ }
23+
24+ return getCorrectErrorType ( error ) ;
25+ }
226
327function sanitize ( req , sanitizers ) {
428 // init an object to store clean (sanitized) input parameters if not initialized
@@ -21,25 +45,15 @@ function sanitize( req, sanitizers ){
2145 req . errors = req . errors . concat ( sanity . errors ) ;
2246 }
2347
24- // all errors must be returned as PeliasParameterError object to trigger HTTP 400 errors
25- req . errors = req . errors . map ( function ( error ) {
26- // replace any existing Error objects with the right class
27- // preserve the message and stack trace
28- if ( error instanceof Error ) {
29- const new_error = new PeliasParameterError ( error . message ) ;
30- new_error . stack = error . stack ;
31- return new_error ;
32- } else {
33- return new PeliasParameterError ( error ) ;
34- }
35- } ) ;
36-
3748 // if warnings occurred then set them
3849 // on the req object.
3950 if ( sanity . warnings . length ) {
4051 req . warnings = req . warnings . concat ( sanity . warnings ) ;
4152 }
4253 }
54+
55+ // all errors must be mapped to a correct Error type to trigger the right HTTP response codes
56+ req . errors = req . errors . map ( ensureInstanceOfError ) ;
4357}
4458
4559// Adds to goodParameters every acceptable parameter passed through API call
0 commit comments