You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
921 B
37 lines
921 B
import * as express from "express"; |
|
|
|
import ApiError from "@common/ApiError"; |
|
import { ErrorCode } from "@common/ErrorCode"; |
|
|
|
const isDev = process.env.NODE_ENV === "development"; |
|
|
|
const errorHandler: express.ErrorRequestHandler = ( |
|
err: any, |
|
req: express.Request, |
|
res: express.Response, |
|
next: express.NextFunction |
|
) => { |
|
if (err instanceof ApiError) { |
|
// TODO: different content-type? |
|
res.status(err.statusCode).json(err.toJSON(isDev)); |
|
} else if (err) { |
|
let error: ApiError; |
|
if (err.code === "ENOENT") { |
|
error = new ApiError( |
|
"The specified resource could not be found", |
|
ErrorCode.NotFound, |
|
err |
|
); |
|
} else { |
|
error = new ApiError( |
|
"An internal server error has occurred", |
|
ErrorCode.Internal, |
|
err.stack ? err.stack : err |
|
); |
|
} |
|
errorHandler(error, req, res, next); |
|
} |
|
next(); |
|
}; |
|
|
|
export default errorHandler;
|
|
|