Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[需求] 处理程序相关 #589

Open
CsVeryLoveXieWenLi opened this issue May 22, 2024 · 12 comments
Open

[需求] 处理程序相关 #589

CsVeryLoveXieWenLi opened this issue May 22, 2024 · 12 comments

Comments

@CsVeryLoveXieWenLi
Copy link

我查了一下,没找到设置,发生错误以后handler的接口。serv处理程序在发生错误时,会直接停止运行并响应503状态码和信息。

有set_default_handler设置没有匹配时的默认handler,能否添加一个set_error_handler之类的接口?发生错误时立即停止,并调用该handler。

@qicosmos
Copy link
Owner

可以加error_handler,它的参数和default_handler一样能否满足需求?

@qicosmos
Copy link
Owner

另外,server发生错误是指什么错误,是http handler里发生异常了吗

@CsVeryLoveXieWenLi
Copy link
Author

另外,server发生错误是指什么错误,是http handler里发生异常了吗

是的,处理请求时发生错误,然后会自行响应50状态码。而不是整个服务崩溃。

@CsVeryLoveXieWenLi
Copy link
Author

可以加error_handler,它的参数和default_handler一样能否满足需求?

我认为没有问题,可以满足需求。但是这样发生错误的原因就无法获取了,或许应该在coro_http_request &, coro_http_response &后面添加一个用来传递错误的参数?

@qicosmos
Copy link
Owner

另外,server发生错误是指什么错误,是http handler里发生异常了吗

是的,处理请求时发生错误,然后会自行响应50状态码。而不是整个服务崩溃。

另外,server发生错误是指什么错误,是http handler里发生异常了吗

是的,处理请求时发生错误,然后会自行响应50状态码。而不是整个服务崩溃。

handler 异常会被捕获,不会发生崩溃。
你测试发现有崩溃?

@qicosmos
Copy link
Owner

qicosmos commented May 24, 2024

可以加error_handler,它的参数和default_handler一样能否满足需求?

我认为没有问题,可以满足需求。但是这样发生错误的原因就无法获取了,或许应该在coro_http_request &, coro_http_response &后面添加一个用来传递错误的参数?

可以加error_handler,它的参数和default_handler一样能否满足需求?

我认为没有问题,可以满足需求。但是这样发生错误的原因就无法获取了,或许应该在coro_http_request &, coro_http_response &后面添加一个用来传递错误的参数?

现在如果发生异常会返回service_unavailable, 但没有把异常信息返回给前端。

  void route(auto handler, auto& req, auto& resp, std::string_view key) {
    try {
      (*handler)(req, resp);
    } catch (const std::exception& e) {
      CINATRA_LOG_WARNING << "exception in business function, reason: "
                          << e.what();
      resp.set_status(status_type::service_unavailable);
    } catch (...) {
      CINATRA_LOG_WARNING << "unknown exception in business function";
      resp.set_status(status_type::service_unavailable);
    }
  }

似乎把异常信息的内容也返回回去就好了,这些信息由框架返回回去就好了,似乎不用再额外加error handler?

@CsVeryLoveXieWenLi
Copy link
Author

另外,server发生错误是指什么错误,是http handler里发生异常了吗

是的,处理请求时发生错误,然后会自行响应50状态码。而不是整个服务崩溃。

另外,server发生错误是指什么错误,是http handler里发生异常了吗

是的,处理请求时发生错误,然后会自行响应50状态码。而不是整个服务崩溃。

handler 异常会被捕获,不会发生崩溃。 你测试发现有崩溃?

没有发现。

@CsVeryLoveXieWenLi
Copy link
Author

可以加error_handler,它的参数和default_handler一样能否满足需求?

我认为没有问题,可以满足需求。但是这样发生错误的原因就无法获取了,或许应该在coro_http_request &, coro_http_response &后面添加一个用来传递错误的参数?

可以加error_handler,它的参数和default_handler一样能否满足需求?

我认为没有问题,可以满足需求。但是这样发生错误的原因就无法获取了,或许应该在coro_http_request &, coro_http_response &后面添加一个用来传递错误的参数?

现在如果发生异常会返回service_unavailable, 但没有把异常信息返回给前端。

  void route(auto handler, auto& req, auto& resp, std::string_view key) {
    try {
      (*handler)(req, resp);
    } catch (const std::exception& e) {
      CINATRA_LOG_WARNING << "exception in business function, reason: "
                          << e.what();
      resp.set_status(status_type::service_unavailable);
    } catch (...) {
      CINATRA_LOG_WARNING << "unknown exception in business function";
      resp.set_status(status_type::service_unavailable);
    }
  }

似乎把异常信息的内容也返回回去就好了,这些信息由框架返回回去就好了,似乎不用再额外加error handler?

我个人希望添加,保持统一的返回格式,当然也可以仅仅非200之类的正常状态码,代表本次请求是错误的,不过还是希望统一返回格式,比如API之类的服务。

@qicosmos
Copy link
Owner

这样吧,如果设置了err handler,则回调给用户,没有则走现在的方式把异常信息response到前端。

@CsVeryLoveXieWenLi
Copy link
Author

这样吧,如果设置了err handler,则回调给用户,没有则走现在的方式把异常信息response到前端。

我认为没有问题,那么传递错误的参数,加吗?

@CsVeryLoveXieWenLi
Copy link
Author

如果更新了请告知我,我把issues关闭。

@qicosmos
Copy link
Owner

好的,晚点加。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants