Bry*_*lie 6 javascript json es6-promise redux
我正在尝试创建一个方案来拦截和处理来自 API 中间件的请求,但是,无论出于何种原因,我无法正确处理来自 API 端点的非 JSON 响应。以下代码片段适用于 JSON 格式的服务器响应,但是假设用户具有无效令牌,服务器会返回一个简单的未经授权访问响应,即使我向 json() 承诺提供错误回调,我也无法处理该响应。在下面的方案中,未授权访问响应消息会丢失。
const callAPI = () => { fetch('http://127.0.0.1:5000/auth/', {
method: 'GET',
headers: {
'credentials': 'include',
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': 'Basic bXlKaGJHY2lPaUpJVXpJMU5pSXNJbVY0Y0NJNk1UUTVPRE15TVRNeU5pd2lhV0YwSWpveE5EazRNak0wT1RJMmZRLmV5SnBaQ0k2TVgwLllFdWdKNF9YM0NlWlcyR2l0SGtOZGdTNkpsRDhyRE9vZ2lkNGVvaVhiMEU6'
}
});
};
return callAPI().then(res => {
return res.json().then(responseJSON => {
if(responseJSON.status === 200){
return dispatch({
type: type[1],
data: responseJSON,
message: success
});
} else if(responseJSON.status === 401) {
return dispatch({
type: type[2],
message: responseJSON.message
});
}
return Promise.resolve(json);
}, (err) => {
console.log(err.toString(), ' an error occured');
});
}, err => {
console.log('An error occured. Please try again.');
});
Run Code Online (Sandbox Code Playgroud)
尝试将响应处理代码包装在try...catch如下块中:
return callAPI().then(res => {
try {
return res.json().then(responseJSON => {
[...]
catch(e) {
console.error(e);
}
});
Run Code Online (Sandbox Code Playgroud)
Body.json()当正文实际上不是 JSON 时抛出。因此,您应该在调用之前检查主体是否包含 JSON json()。请参阅https://developer.mozilla.org/en-US/docs/Web/API/Response。
| 归档时间: |
|
| 查看次数: |
4874 次 |
| 最近记录: |