Reputation: 582
I want the specific errors that are thrown inside try
block not to be handled by catch(err)
Example:
const someFunc = async () => {
...
try {
...
// This error should not be handled by the catch and go straight to the middleware
throw {
status: 404,
message: "Not Found",
};
} catch (error) {
throw {
status: 500,
message: "Something went wrong",
reason: error,
};
}
};
After that the middleware handles the errors.
export const errorHandler: ErrorRequestHandler = (err, req, res, next) => {
const { status = 500, message, reason } = err;
res.status(status).json({
success: false,
message: message || "Something went wrong",
reason: reason || undefined,
});
};
Upvotes: 0
Views: 1098
Reputation: 6868
If you throw an error inside a try
-block, the catch
will catch it. The best you can do is to check in the catch
-block if the error you don't want to catch is thrown and if so, rethrow it.
const someFunc = async () => {
try {
throw {
status: 404,
message: "Not Found",
};
} catch (error) {
// If a 404 error is caught, rethrow it.
if (error.status === 404) {
throw error;
}
throw {
status: 500,
message: "Something went wrong",
reason: error,
};
}
};
Upvotes: 5