You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel/Axios仅返回状态码无JSON响应异常处理问题

解决Laravel异常Handler返回JSON消息前端无法获取的问题

我来帮你排查这个问题,你遇到的情况很常见,主要出在两个地方:Laravel端的异常处理逻辑优先级,以及前端Axios捕获响应的方式。

一、Laravel端:AuthenticationException的特殊处理逻辑

首先要注意,AuthenticationException在Laravel中有专门的处理方法,不是直接在render方法里判断的——默认情况下,Laravel会优先调用Handler类的unauthenticated方法来处理未授权请求,所以你在render里的判断可能根本没触发。

修改你的Handler.php,添加/重写unauthenticated方法:

protected function unauthenticated($request, AuthenticationException $exception)
{
    // 判断是否是API类请求(期望JSON响应)
    if ($request->expectsJson()) {
        return response()->json(['message' => 'Unauthorized1'], 401);
    }

    // 非API请求保持原有跳转逻辑
    return redirect()->guest(route('login'));
}

另外,对于其他自定义异常(比如ModelNotFoundException、InvalidStateException),建议加上$request->expectsJson()的判断,确保只在API请求时返回JSON格式:

public function render($request, Exception $exception)
{
    if ($request->expectsJson()) {
        if($exception instanceof ModelNotFoundException){
            return response()->json([ 
                'message' => ''.str_replace('App\\', '', $exception->getModel()).' not found.'
            ], 404);
        }
        if($exception instanceof InvalidStateException){
            return response()->json(['message' => $exception->getMessage()], 400);
        }
    }

    return parent::render($request, $exception);
}

二、前端Axios:正确捕获响应数据

你的Axios代码里,catch(e => console.log(e))打印的是整个错误对象,而Laravel返回的JSON消息其实存在e.response.data属性里。修改前端代码:

const login = (user) => axios.post(base + 'api/login', user)
    .catch(e => {
        // 打印完整的响应JSON数据
        console.log(e.response.data);
        // 单独获取message字段
        console.log(e.response.data.message);
    });

三、额外验证:确保请求头包含Accept: application/json

Axios默认会发送这个请求头,但如果项目有特殊配置可能被覆盖,可以显式设置:

const login = (user) => axios.post(base + 'api/login', user, {
    headers: {
        'Accept': 'application/json'
    }
})
.catch(e => console.log(e.response.data));

这样调整后,前端应该就能正确获取到你自定义的异常消息了。

内容的提问来源于stack exchange,提问作者ivaylo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:07:53