当前位置: 首页 > 知识库问答 >
问题:

Axios在调用Laravel API时捕获响应

濮阳原
2023-03-14

嗨,我正在为后端使用Laravel API,并在React中使用Redux进行登录。嗯,我调用API,我希望laravel API传递正在发生的事情的精确错误,例如用户不存在。问题是当我想在使用axios进行的调用的catch部分访问Mesage时

Laravel登录部分

public function login(Request $request){
        
        $loginData = $request->validate([
            'name' => 'required',
            'password' => 'required'
        ]);

        if (!auth()->attempt($loginData)) {
            return response(["message" => "I want to acces this message in the catch part of Axios"], 401);
        }

        $accessToken = auth()->user()->createToken('authToken')->accessToken;

        return response(['user' => auth()->user(), 'access_token' => $accessToken]);

    }

使用axios响应调用

Axios({
                method: 'post',
                url: '/login',
                data: {
                  name: name,
                  password: password,
                }
            }).then(function (response) {
                dispatch(authSuccess(response.data.access_token, response.data.user.id));
            })
            .catch(function (response) {
                console.log(response)
            });

我在网络控制台中得到的响应

xhr.js:177邮政http://127.0.0.1:8000/api/login401(未经授权)

我想获得我在Laravel API中传递的消息(“我想在Axios的catch部分访问此消息”)

共有2个答案

饶高雅
2023-03-14

您可以在此处使用从服务器接收到的错误对象,这是获取进一步流程错误对象的示例代码:

 Axios({
          method: 'post',
           url: '/login',
          data: {
             name: name,
             password: password,
                }
            }).then(function (response) {
                dispatch(authSuccess(response.data.access_token, response.data.user.id));
            })
             .catch(err => { 
        if (err.response) { 
          // client received an error response (5xx, 4xx)
        } else if (err.request) { 
          // client never received a response, or request never left 
        } else { 
          // anything else 
        } 
      })
印子平
2023-03-14

在您的控制器中尝试这样返回响应

public function login(Request $request){
        
        $loginData = $request->validate([
            'name' => 'required',
            'password' => 'required'
        ]);

        if (!auth()->attempt($loginData)) {
            return response()->json([
                'status' => 'error',
                'message'    => 'I want to acces this message in the catch part of Axios',
            ], 401);
        }

        $accessToken = auth()->user()->createToken('authToken')->accessToken;

        return response(['user' => auth()->user(), 'access_token' => $accessToken]);

    }

在axios中捕捉错误

.catch((error) => {
                // console.log(error.response.data.status);
                console.log(error.response.data.message);
                
            })
 类似资料:
  • 我无法用axios捕捉错误响应。怎么做?我用的是: 我看到ajax请求的结果有400个状态代码,响应主体看起来像(Django后端)。没关系,我已经准备好在catch处理程序中处理这些错误了。 但是它们转到成功处理程序。为何如此?我在控制台中看到以下输出: 成功处理程序接收axios错误对象作为结果。为什么会这样,下一步该怎么办?此错误对象不包含任何有用信息。 UPD。实际上,错误对象包含有用的信

  • 我正在从后端代码发送状态代码422,其中包含错误描述的响应正文。我使用axios post发布请求,如下所示: 问题是,当后端返回错误代码422时,我捕获的错误对象没有关于响应体的信息。有什么方法可以检索错误文本吗?

  • 我在我的反应应用程序中有一个axios请求,为此我遵循axios npm文档。 这是我的axios请求 我能够成功记录成功请求的数据。但是,当我故意产生一个错误并尝试将其记录到console.log中时,我不会将结果记录下来,我只是看到了 邮递http://localhost:3000/login 401(未经授权):3000/登录:1 错误:请求失败,状态代码401 login.js:66 在c

  • 我正在使用以下代码向Laravel发布一些内容: (不相关代码省略) 当Laravel返回200时,这总体上是有效的。如果我从Laravel Axios返回401、422或其他东西,会在控制台中抛出一个错误,整个方法将停止运行。 我一直认为这是一种非常不利于开发人员的行为——我不明白吗?从后端API返回不同的状态代码应该有助于读取Vue中的响应,但Vue/Axios将每个非200响应视为致命错误。

  • 我对CompletableFuture是个新手,我想调用一个可以引发异常的方法MetadataLoginutil::Login。然而,下面的代码没有编译,尽管我已经‘异常’编写。它说我必须在try&catch中包装metadataloginutil::login'。 请指教。前面谢谢!

  • 我目前正在使用Jmeter测试API的响应时间。让我们称之为API A。如果API A调用API B,而API B托管在同一台服务器上,但端口不同,那么我有没有办法使用JMeter捕获API B的响应时间呢? 我意识到这里有一个类似的问题,试图完成同样的事情,但它对我不起作用。我看不到对API B的内部调用。