simplest way to catch handler exceptions

This commit is contained in:
Rafael Leira authored and yhirose committed 2020-03-10 17:44:36 -04:00
1 parent 6e473a7c5c
commit e07c5fec01
1 file changed
+15 -6
+15 -6
View File
@@ -3462,14 +3462,23 @@ inline bool Server::routing(Request &req, Response &res, Stream &strm,
inline bool Server::dispatch_request(Request &req, Response &res,
Handlers &handlers) {
for (const auto &x : handlers) {
const auto &pattern = x.first;
const auto &handler = x.second;
if (std::regex_match(req.path, req.matches, pattern)) {
handler(req, res);
return true;
try {
for (const auto &x : handlers) {
const auto &pattern = x.first;
const auto &handler = x.second;
if (std::regex_match(req.path, req.matches, pattern)) {
handler(req, res);
return true;
}
}
} catch (const std::exception &ex) {
res.status = 500;
res.set_header("EXCEPTION_WHAT", ex.what());
} catch (...) {
res.status = 500;
res.set_header("EXCEPTION_WHAT", "UNKNOWN");
}
return false;
}