Skip to main content

Error Handling

Make an Error Response

To make an error response, simply throw a new instance of ResponseError.

import { Controller, Get, ResponseError } from '@summer-js/summer'

@Controller
export class AppController {
@Get('/error')
info() {
throw new ResponseError(400, { message: 'error' })
return "it's works"
}
}

To have a nice Error Response list, you can create an error list file.

src/errors.ts
import { ResponseError } from '@summer-js/summer'

export const AppError = {
LOGIN_FAIL: new ResponseError(400, { message: 'login failed' }),
REGISTER_FAIL: new ResponseError(400, { message: 'register failed' }),
RESET_PASSWORD_FAIL: new ResponseError(400, { message: 'reset password failed' })
}
src/controller/AppController.ts
import { Controller, Get } from '@summer-js/summer'
import { AppError } from '../error'

@Controller
export class AppController {
@Get('/login')
login() {
throw AppError.LOGIN_FAIL
return 'done'
}
}

Customize Errors Response Format

You can handle error response format by following 2 ways.

Handle Errors By ErrorHandler

src/error/ErrorHandler.ts
import { OtherErrors, E, ErrorHandler, Logger, NotFoundError, ValidationError } from '@summer-js/summer'

@ErrorHandler
export class HandleError {
@E(NotFoundError)
notFound() {
return { statusCode: 404, body: 'Page Not Found ~' }
}

@E(ValidationError)
validateFail(err: ValidationError) {
return { statusCode: 404, body: err.body.errors }
}

@E(OtherErrors)
default(err) {
Logger.error(err)
return { statusCode: 500, body: 'Some Error Happen' }
}
}

Handle Errors By Middleware

src/error/ErrorMiddleware.ts
import { Middleware, Context, ValidationError, NotFoundError, ResponseError, Logger } from '@summer-js/summer'

@Middleware({ order: 0 })
export class ErrorMiddleware {
async process(ctx: Context, next: any) {
try {
await next()
} catch (err) {
if (err instanceof ValidationError) {
throw new ResponseError(400, { msg: err.body.message, err: err.body.errors })
} else if (err instanceof NotFoundError) {
throw new ResponseError(400, { msg: 'Page Not Found!' })
} else if (err instanceof ResponseError) {
throw err
} else {
Logger.error(err)
throw new ResponseError(500, { msg: 'Server Error' })
}
}
}
}