如何解析从后端接收并作为javascript中的Error对象分派的错误

问题描述 投票:-2回答:3

我正在使用具有此方法的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

我需要的是消息的文本值:“此电子邮件不存在。”

谢谢你。

javascript json parsing object response
3个回答
0
投票

如果响应以字符串形式返回,则可以使用JSON.parse() Javascript函数将其转换为JSON对象。

一旦响应为JSON格式,您就可以通过遍历响应来简单地检索值:

var errorMessage = response.message[0].messages[0].message;

0
投票

[第一件事是确保您有一个对象,而不是看起来像对象的字符串。假设数据是从网络调用返回的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);
});

0
投票

[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
        }
      ]
    }
  ]
}

请注意,仅当messagemessages数组中包含某些内容时,此方法才有效。如果不确定,可以使用error.message.flatMap(msg => msg.messages.map(innerMsg => innerMsg.message))

© www.soinside.com 2019 - 2024. All rights reserved.