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.

38 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;