@@ -158,8 +158,15 @@ function errorHandler(
158
158
err . message = translate ( err . message ) ;
159
159
} else if ( isErrorConstructorName ( err , 'RedisError' ) ) {
160
160
// redis errors (e.g. ioredis' MaxRetriesPerRequestError)
161
- err . status = 408 ;
162
- err . message = translate ( Boom . clientTimeout ( ) . output . payload . message ) ;
161
+ //
162
+ // NOTE: we have to have 500 error here to prevent endless redirect loop
163
+ //
164
+ err . status = type === 'html' ? 504 : 408 ;
165
+ err . message = translate (
166
+ type === 'html'
167
+ ? Boom . gatewayTimeout ( ) . output . payload . message
168
+ : Boom . clientTimeout ( ) . output . payload . message
169
+ ) ;
163
170
} else if ( passportLocalMongooseErrorNames . has ( err . name ) ) {
164
171
// passport-local-mongoose support
165
172
if ( ! err . no_translate ) err . message = translate ( err . message ) ;
@@ -179,8 +186,15 @@ function errorHandler(
179
186
isErrorConstructorName ( err , 'MongooseError' )
180
187
) {
181
188
// parse mongoose (and mongodb connection errors)
182
- err . status = 408 ;
183
- err . message = translate ( Boom . clientTimeout ( ) . output . payload . message ) ;
189
+ //
190
+ // NOTE: we have to have 500 error here to prevent endless redirect loop
191
+ //
192
+ err . status = type === 'html' ? 504 : 408 ;
193
+ err . message = translate (
194
+ type === 'html'
195
+ ? Boom . gatewayTimeout ( ) . output . payload . message
196
+ : Boom . clientTimeout ( ) . output . payload . message
197
+ ) ;
184
198
} else if (
185
199
// prevent code related bugs from
186
200
// displaying to users in production environments
0 commit comments