中间件捕获接口异常后如何再原封不动的返回

问题

新建了一个中间件,接口路由加入了此中间件,该中间件的应用是 将接口抛出的异常错误记录在日志中后,再把response 返回去,但是,捕获到异常后的response已经 变成未定义了,该如何解决呢?

public function handle(ServerRequestInterface $request, DelegateInterface $next)
{
    try{
        $response = $next->process($request);
        $log["response"] = $response->getContents();
        $this->writeLog(json_encode($log, JSON_UNESCAPED_UNICODE));
    } catch (\Exception $e) {
        $log["response"] = $e->getMessage();
        $this->writeLog(json_encode($log, JSON_UNESCAPED_UNICODE));
        return $response;
    }
    return $response;
}
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案
public function handle(ServerRequestInterface $request, DelegateInterface $next)
{
    try{
        $response = $next->process($request);
        $log["response"] = $response->getContents();
        $this->writeLog(json_encode($log, JSON_UNESCAPED_UNICODE));
    } catch (\Exception $e) {
        $log["response"] = $e->getMessage();
        $this->writeLog(json_encode($log, JSON_UNESCAPED_UNICODE));
        throw $e;
    }

}
3年前 评论
caiyaonan (楼主) 3年前
54skyer 3年前
讨论数量: 2
public function handle(ServerRequestInterface $request, DelegateInterface $next)
{
    try{
        $response = $next->process($request);
        $log["response"] = $response->getContents();
        $this->writeLog(json_encode($log, JSON_UNESCAPED_UNICODE));
    } catch (\Exception $e) {
        $log["response"] = $e->getMessage();
        $this->writeLog(json_encode($log, JSON_UNESCAPED_UNICODE));
        throw $e;
    }

}
3年前 评论
caiyaonan (楼主) 3年前
54skyer 3年前

看文档要仔细

return $next($response);
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!