У меня есть следующая функция извлечения
request(url, options) {
return fetch(url, _.defaultsDeep(options || {}, defaultOptions))
.then(handleErrors)
.then(response => response.json())
.catch(error => handleFetchError(error));
}
Функция handleErrors
выполняет следующие действия, чтобы проверить, не получен ли ответ ...
function handleErrors(response) {
if (!response.ok) {
throw new Error(response.statusText);
}
return response;
}
Проблема, с которой я столкнулся, заключается в том, что API возвращает статус 400
, а также массив с соответствующими сообщениями об ошибках, но использование throw new Error(response.statusText);
просто возвращает общее сообщение об ошибке Error: [object Object]
без доступа к файлу. массив ошибок.
Это то, что я ожидал получить в ответе
{
"status": 400,
"error": "Bad Request",
"errors": [
{ "defaultMessage": "Please check that your name contains only letters and is longer than two characters" }
]
}
У меня нет доступа к стороне сервера API, поэтому я не могу ничего там изменить.
Но есть ли способ, которым я могу выдать ошибку для отлова, но также получить доступ к массиву errors
в ответе?
EDIT:
В handleErrors
это объект ответа, который я получаю
{
"type": "default",
"status": 401,
"ok": false,
"statusText": "",
"headers": {
"map": {
"pragma": "no-cache",
"date": "Wed, 01 May 2019 07:44:40 GMT",
"x-content-type-options": "nosniff",
"x-frame-options": "DENY",
"content-type": "application/json;charset=ISO-8859-1",
"cache-control": "no-cache, no-store, max-age=0, must-revalidate",
"content-length": "53",
"x-xss-protection": "1; mode=block",
"expires": "0"
}
},
"url": "http://localhost:8080/login",
"_bodyInit": {},
"_bodyBlob": {}
}
Когда я выкидываю ошибку и пытаюсь получить к ней доступ в handleFetchError
, аргумент error
- это просто пустой объект {}