我正在使用具有此方法的SDK:
/**
* Axios request
* @param method Request method
* @param url Server URL
* @param requestConfig Custom Axios config
*/
async request(method, url, requestConfig) {
try {
const response = await this.axios.request(Object.assign({ method,
url }, requestConfig));
return response.data;
}
catch (error) {
if (error.response) {
throw new Error(error.response.data.message);
}
else {
throw error;
}
}
}
我正在尝试解析此方法发出的错误。第二种情况我没有问题-throw error;
但是在第一种情况下,我无法解析消息-throw new Error(error.response.data.message);
如果我使用console.log("Error: ", error);
调试错误,则会在控制台中获得Error: Error: [object Object]
。
也许问题是Error在其构造函数中期望一个字符串,因此它在对象上执行toString()方法。
这是我在检查工具中的“网络”选项卡上看到的响应:
{"statusCode":400,"error":"Bad Request","message":[{"messages":[{"id":"Auth.form.error.user.not-exist","message":"This email does not exist."}]}]}
而且我只能输出:error.message[0]
如果尝试error.message[0].messages
,则无法定义。
如果尝试:const errorToJSON = JSON.parse(error)
,我会收到此错误:
Unhandle Rejection (SyntaxError): Unexpected token E in JSON at position 0
我需要的是消息的文本值:“此电子邮件不存在。”
谢谢你。
如果响应以字符串形式返回,则可以使用JSON.parse()
Javascript函数将其转换为JSON对象。
一旦响应为JSON格式,您就可以通过遍历响应来简单地检索值:
var errorMessage = response.message[0].messages[0].message;
[第一件事是确保您有一个对象,而不是看起来像对象的字符串。假设数据是从网络调用返回的JSON字符串。
使用JSON.parse(json)
创建可用的JS对象。
准备好对象后,您可以通过导航JSON树找到消息。 message
是一个数组。该数组中的第一个对象是另一个名为messages.
的属性。这是包含消息数组的对象。因此,这里是获取消息列表的代码。
// here is the return value as a string
var json = '{"statusCode":400,"error":"Bad Request","message":[{"messages":[{"id":"Auth.form.error.user.not-exist","message":"This email does not exist."}]}]}';
// parse the string to an object
var data = JSON.parse(json);
// get the messages array from the object
var messages = data.message[0];
// loop through the array and log the messages to the console
messages.messages.forEach((e)=> {
console.log(e);
});
[As epascarello says,您应该可以通过error.message[0].messages[0].message
发出错误消息。观看演示:
const error = {"statusCode":400,"error":"Bad Request","message":[{"messages":[{"id":"Auth.form.error.user.not-exist","message":"This email does not exist."}]}]}
console.log(error.message[0].messages[0].message)
这就是它为什么起作用的原因。
error // The parent object your message is stored in
.message // Get the `message` parameter from the object
[0] // `message` is an array. Get the first object from the array
.messages // Get the `messages` parameter from the object
[0] // `message` is also an array. Get the first object from the array
.message // Get the `message` parameter from the object
{ <------ error
"statusCode":400,
"error":"Bad Request",
"message":[ <------ .message
{ <------ [0]
"messages":[ <------ .messages
{ <------ [0]
"id":"Auth.form.error.user.not-exist",
"message":"This email does not exist." <------ .message
}
]
}
]
}
请注意,仅当message
和messages
数组中包含某些内容时,此方法才有效。如果不确定,可以使用error.message.flatMap(msg => msg.messages.map(innerMsg => innerMsg.message))