浏览器收到响应后将覆盖消息的内容

时间:2019-06-03 18:22:26

标签: laravel vue.js axios dingo-api

当我尝试从响应中获取错误消息时,我对DingoAPI和Vue.js有点问题。我认为浏览器正在将我的自定义消息替换为默认消息。这是我的代码:

PHP脚本

if($request->readerId){
      Return succes (this works properly)
else{
      return $this->response->error(
           'No reader',
           400 //(or diffrent code)
      );
}

Vue.js脚本

await axios.post(API_URL + 'card/', {
            some data
        }, {
            headers: {
                headers
            },
        }).then(({data}) => {
            context.commit(SET_RESPONSE, data);
        }).catch((error) => {
            console.log(error.message);
            throw error
        })

当我尝试查看“网络”标签中的消息时,我可以看到(所以DingoAPI正确地做到了):

  

{“消息”:“无读者”,“状态码”:400}

但是当我使用console.log(error.message)或试图在页面上显示它时,会出现标准错误消息:

  

请求失败,状态码为400

是否可以使用DingoAPI设置错误消息并将其捕获到我的.js脚本中? 也许我需要编写自己的自定义异常?

1 个答案:

答案 0 :(得分:1)

您想要的是从错误变量访问响应数据。

import * as qs from "qs";

import { Gateway, getGateway, Response } from "../interfaces";

import { HelpGetResponse } from "./../models/HelpDTO";

export class HelpAPI {
    private readonly gateway: Gateway;

    constructor(gateway?: Gateway) {
        this.gateway = gateway || getGateway();
    }

    getHelpFiles(): Promise<Response<HelpGetResponse>> {
        return this.gateway.get("helpFiles/", {});
    }

    getHelpFileById(path: string): Promise<Response<HelpGetResponse>> {
        return this.gateway.get(`help${path}/`, {});
    }
}

export const helpApi = new HelpAPI();

否则,您可以登录console.log(error.response.data.message); // No reader 来查看对象:

error.response

如果您想知道为什么打印请求失败,状态码为400

  

问题是当console.log尝试输出错误时,打印的是字符串表示形式,而不是对象结构,因此您看不到console.log(error.response); 属性。

来源:https://github.com/axios/axios/issues/960#issuecomment-309287911