diff --git a/HttpServer/Route/Node.php b/HttpServer/Route/Node.php index 31e7d908..50316b3d 100644 --- a/HttpServer/Route/Node.php +++ b/HttpServer/Route/Node.php @@ -419,7 +419,7 @@ class Node extends Application public function dispatch() { if (empty($this->callback)) { - return JSON::to(404, 'Page not found.'); + return JSON::to(404, $this->_error ?? 'Page not found.'); } return call_user_func($this->callback, \request()); } diff --git a/HttpServer/Route/Router.php b/HttpServer/Route/Router.php index 7137aa77..d4f2f306 100644 --- a/HttpServer/Route/Router.php +++ b/HttpServer/Route/Router.php @@ -417,16 +417,26 @@ class Router extends Application implements RouterInterface */ public function dispatch() { - /** @var Node $node */ - $request = Context::getContext('request'); - if (!($node = $this->find_path($request))) { - return send(JSON::to(404, self::NOT_FOUND)); - } - $response = send($node->dispatch(), 200); - if ($node->hasAfter()) { + try { + /** @var Node $node */ + $request = Context::getContext('request'); + if (!($node = $this->find_path($request))) { + $response = send(JSON::to(404, self::NOT_FOUND), 404); + } else { + $response = send($node->dispatch(), 200); + } + } catch (\Throwable $exception) { + $trance = JSON::to(500, $exception->getMessage(), [ + 'file' => $exception->getFile(), + 'line' => $exception->getLine() + ]); + $response = send($trance, 200); + } finally { + if (!$node->hasAfter()) { + return; + } $node->afterDispatch($response); } - return $response; }