【发布时间】:2019-09-19 07:02:18
【问题描述】:
我有以下获取函数
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 数组?
编辑:
在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 参数只是一个空对象{}
【问题讨论】:
-
'Error: [object object]' 只是使用
toString()时隐藏实际底层对象的控制台输出。你能做一个console.log(JSON.stringify(Error)看看这个对象是什么样子的吗?并使用该信息更新您的问题?
标签: javascript reactjs error-handling fetch