fix(error): add sanity checks before error destructuring

also preserve original stack trace(and print it) in dev mode
This commit is contained in:
zyachel
2024-08-23 03:16:05 +05:30
parent 333d3b107e
commit e320557add
16 changed files with 79 additions and 58 deletions

View File

@ -3,7 +3,7 @@ import Find, { type FindQueryParams } from 'src/interfaces/shared/search';
import basicSearch from 'src/utils/fetchers/basicSearch';
import getOrSetApiCache from 'src/utils/getOrSetApiCache';
import { findKey } from 'src/utils/constants/keys';
import { AppError, cleanQueryStr } from 'src/utils/helpers';
import { AppError, cleanQueryStr, getErrorProperties } from 'src/utils/helpers';
import { findFilterable } from 'src/utils/constants/find';
type ResponseData =
@ -25,8 +25,8 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
const results = await getOrSetApiCache(findKey(queryStr), basicSearch, queryStr);
res.status(200).json({ status: true, data: { title: query, results } });
} catch (error: any) {
const { message = 'Not found', statusCode = 404 } = error;
} catch (error) {
const { message, statusCode } = getErrorProperties(error);
res.status(statusCode).json({ status: false, message });
}
}

View File

@ -3,7 +3,7 @@ import type Name from 'src/interfaces/shared/name';
import name from 'src/utils/fetchers/name';
import getOrSetApiCache from 'src/utils/getOrSetApiCache';
import { nameKey } from 'src/utils/constants/keys';
import { AppError } from 'src/utils/helpers';
import { AppError, getErrorProperties } from 'src/utils/helpers';
type ResponseData = { status: true; data: Name } | { status: false; message: string };
@ -15,8 +15,9 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
const data = await getOrSetApiCache(nameKey(nameId), name, nameId);
res.status(200).json({ status: true, data });
} catch (error: any) {
const { message = 'Not found', statusCode = 404 } = error;
} catch (error) {
const { message, statusCode } = getErrorProperties(error);
res.status(statusCode).json({ status: false, message });
}
}

View File

@ -3,7 +3,7 @@ import type Title from 'src/interfaces/shared/title';
import title from 'src/utils/fetchers/title';
import getOrSetApiCache from 'src/utils/getOrSetApiCache';
import { titleKey } from 'src/utils/constants/keys';
import { AppError } from 'src/utils/helpers';
import { AppError, getErrorProperties } from 'src/utils/helpers';
type ResponseData = { status: true; data: Title } | { status: false; message: string };
@ -14,8 +14,8 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
const titleId = req.query.titleId as string;
const data = await getOrSetApiCache(titleKey(titleId), title, titleId);
res.status(200).json({ status: true, data });
} catch (error: any) {
const { message = 'Not found', statusCode = 404 } = error;
} catch (error) {
const { message, statusCode } = getErrorProperties(error);
res.status(statusCode).json({ status: false, message });
}
}

View File

@ -3,7 +3,7 @@ import type { TitleReviewsCursored } from 'src/interfaces/shared/titleReviews';
import { cursoredReviews } from 'src/utils/fetchers/titleReviews';
import getOrSetApiCache from 'src/utils/getOrSetApiCache';
import { titleReviewsKey } from 'src/utils/constants/keys';
import { AppError, cleanQueryStr } from 'src/utils/helpers';
import { AppError, cleanQueryStr, getErrorProperties } from 'src/utils/helpers';
import { keys as titleReviewsQueryKeys } from 'src/utils/constants/titleReviewsFilters';
type ResponseData =
@ -26,8 +26,8 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
queryStr
);
res.status(200).json({ status: true, data });
} catch (error: any) {
const { message = 'Not found', statusCode = 404 } = error;
} catch (error) {
const { message, statusCode } = getErrorProperties(error);
res.status(statusCode).json({ status: false, message });
}
}

View File

@ -4,7 +4,7 @@ import reviews from 'src/utils/fetchers/titleReviews';
import getOrSetApiCache from 'src/utils/getOrSetApiCache';
import { titleReviewsKey } from 'src/utils/constants/keys';
import { keys } from 'src/utils/constants/titleReviewsFilters';
import { AppError, cleanQueryStr } from 'src/utils/helpers';
import { AppError, cleanQueryStr, getErrorProperties } from 'src/utils/helpers';
type ResponseData = { status: true; data: TitleReviews } | { status: false; message: string };
@ -22,8 +22,8 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
queryStr
);
res.status(200).json({ status: true, data });
} catch (error: any) {
const { message = 'Not found', statusCode = 404 } = error;
} catch (error) {
const { message, statusCode } = getErrorProperties(error);
res.status(statusCode).json({ status: false, message });
}
}