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

问题

新建了一个中间件,接口路由加入了此中间件,该中间件的应用是 将接口抛出的异常错误记录在日志中后,再把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;
}
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案
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;
    }

}
5年前 评论
caiyaonan (楼主) 5年前
54skyer 4年前
讨论数量: 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;
    }

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

看文档要仔细

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

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