如何在 axios 中捕获状态 = 取消?
How to catch status = cancelled in axios?
我目前运行 2台服务器:
- 使用从使用 express 构建的 REST API 检索数据的 react 来提供视图。
- 为视图提供 REST API。
以下是我登录用户的操作:
// Redux Action
export function loginUser(creds, role) {
return dispatch => {
// We dispatch requestLogin to kickoff the call to the API
dispatch(requestLogin(creds));
return axios.post(`${ROOT_URL}/login/${role}`, creds).then((response) => {
console.log(response);
if(response.status === 200) {
// If login was successful, set the token in local storage
localStorage.setItem('id_token', response.data);
// Dispatch the success action
dispatch(receiveLogin(response));
return response;
}
}).catch(err => {
// If there was a problem, we want to
// dispatch the error condition
dispatch(loginError(err.data));
return err;
});
};
}
我故意断开我的数据库以捕获错误并查看会发生什么。所以,这就是我在终端中看到的:
12:49:24 Project-0 Server is listening at port 3000
12:49:24 Project-0 Mongoose disconnected
12:49:24 Project-0 Mongoose connection error: MongoError: connect ECONNREFUSED 192.168.1.116:27017
12:49:34 Project-0 Wed, 13 Apr 2016 07:19:34 GMT express deprecated res.send(status): Use res.sendStatus(status) instead at app/index.js:61:7
12:49:34 Project-0 OPTIONS /login/admin Wed, 13 Apr 2016 07:19:34 GMT ::ffff:192.168.1.134 200 5.894
12:49:35 Project-0 POST /login/admin Wed, 13 Apr 2016 07:19:35 GMT ::ffff:192.168.1.134 - -
现在,当我提交登录表单时,状态从待处理变为已取消。
我们如何使用 axios 捕获此状态,或者我们是否必须为此在 express 本身中编写一个机制?
注意:我无法标记 axios,因为该标记不存在,我无法创建新标记。
你实际上在 catch 语句中捕获了错误(不成功的响应)。例如,您可以像这样将其记录到控制台:
.catch(err => {
// If there was a problem, we want to
// dispatch the error condition
dispatch(loginError(err.data));
console.log(err);
return err;
});
使用axios.isCancel()
.catch(err => {
if(axios.isCancel(err)) {
// do something
}
}
)
我目前运行 2台服务器:
- 使用从使用 express 构建的 REST API 检索数据的 react 来提供视图。
- 为视图提供 REST API。
以下是我登录用户的操作:
// Redux Action
export function loginUser(creds, role) {
return dispatch => {
// We dispatch requestLogin to kickoff the call to the API
dispatch(requestLogin(creds));
return axios.post(`${ROOT_URL}/login/${role}`, creds).then((response) => {
console.log(response);
if(response.status === 200) {
// If login was successful, set the token in local storage
localStorage.setItem('id_token', response.data);
// Dispatch the success action
dispatch(receiveLogin(response));
return response;
}
}).catch(err => {
// If there was a problem, we want to
// dispatch the error condition
dispatch(loginError(err.data));
return err;
});
};
}
我故意断开我的数据库以捕获错误并查看会发生什么。所以,这就是我在终端中看到的:
12:49:24 Project-0 Server is listening at port 3000
12:49:24 Project-0 Mongoose disconnected
12:49:24 Project-0 Mongoose connection error: MongoError: connect ECONNREFUSED 192.168.1.116:27017
12:49:34 Project-0 Wed, 13 Apr 2016 07:19:34 GMT express deprecated res.send(status): Use res.sendStatus(status) instead at app/index.js:61:7
12:49:34 Project-0 OPTIONS /login/admin Wed, 13 Apr 2016 07:19:34 GMT ::ffff:192.168.1.134 200 5.894
12:49:35 Project-0 POST /login/admin Wed, 13 Apr 2016 07:19:35 GMT ::ffff:192.168.1.134 - -
现在,当我提交登录表单时,状态从待处理变为已取消。
我们如何使用 axios 捕获此状态,或者我们是否必须为此在 express 本身中编写一个机制?
注意:我无法标记 axios,因为该标记不存在,我无法创建新标记。
你实际上在 catch 语句中捕获了错误(不成功的响应)。例如,您可以像这样将其记录到控制台:
.catch(err => {
// If there was a problem, we want to
// dispatch the error condition
dispatch(loginError(err.data));
console.log(err);
return err;
});
使用axios.isCancel()
.catch(err => {
if(axios.isCancel(err)) {
// do something
}
}
)