UNPKG

@sphereon/ssi-express-support

Version:

50 lines (48 loc) 1.89 kB
import express, { NextFunction } from 'express' export function sendErrorResponse(response: express.Response, statusCode: number, message: string | object, error?: any) { let msg = message if (!msg) { console.error('Message was null when calling sendErrorResponse. This should not happen') msg = 'An unexpected error occurred' statusCode = 500 } else { console.error(`sendErrorResponse (${statusCode}): ${typeof msg === 'string' ? msg : JSON.stringify(msg)}`) } if (error) { if (error instanceof Error) { console.error(`error message: ${error.message}`) } console.error(`error object: ${JSON.stringify(error)}`) } if (statusCode >= 500) { console.error('Original error stack (if any) and REST API error stack:') console.error(error?.stack) console.error(Error().stack) } if (response.headersSent) { console.error(`sendErrorResponse headers already sent`) return response } response.statusCode = statusCode if (typeof msg === 'string' && !msg.startsWith('{')) { msg = { error: msg } } if (typeof msg === 'string' && msg.startsWith('{')) { response.header('Content-Type', 'application/json') return response.status(statusCode).end(msg) } return response.status(statusCode).json(msg) } export const jsonErrorHandler = (err: any, req: express.Request, res: express.Response, next: NextFunction) => { const statusCode: number = 'statusCode' in err ? err.statusCode : 500 let errorMsg = typeof err === 'string' ? err : (err.message ?? err) if (typeof errorMsg !== 'string') { errorMsg = JSON.stringify(errorMsg) } if (res.headersSent) { console.log('Headers already sent, when calling error handler. Will defer to next error handler') console.log(`Error was: ${JSON.stringify(err)}`) return next(err) } return sendErrorResponse(res, statusCode, errorMsg, err) }