@middy/http-error-handler
Version:
Http error handler middleware for the middy framework
60 lines (50 loc) • 1.6 kB
JavaScript
import { jsonSafeParse, normalizeHttpResponse } from '@middy/util'
const defaults = {
logger: console.error,
fallbackMessage: undefined
}
const httpErrorHandlerMiddleware = (opts = {}) => {
const options = { ...defaults, ...opts }
const httpErrorHandlerMiddlewareOnError = async (request) => {
if (request.response !== undefined) return
if (typeof options.logger === 'function') {
options.logger(request.error)
}
// Set default expose value, only passes in when there is an override
if (request.error.statusCode && request.error.expose === undefined) {
request.error.expose = request.error.statusCode < 500
}
// Non-http error OR expose set to false
if (!request.error.expose || !request.error.statusCode) {
request.error = {
statusCode: 500,
message: options.fallbackMessage,
expose: true
}
}
if (request.error.expose) {
normalizeHttpResponse(request)
const { statusCode, message, headers } = request.error
request.response = {
...request.response,
statusCode,
headers: {
...request.response.headers,
...headers
}
}
if (message) {
const headerContentType =
typeof jsonSafeParse(message) === 'string'
? 'text/plain'
: 'application/json'
request.response.body = message
request.response.headers['Content-Type'] = headerContentType
}
}
}
return {
onError: httpErrorHandlerMiddlewareOnError
}
}
export default httpErrorHandlerMiddleware