当我尝试从响应中获取错误消息时,我对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脚本中? 也许我需要编写自己的自定义异常?
答案 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