im试图将用户重定向到特定路由(如果他未登录并未经授权以更新用户)(401)并得到此“无法读取未定义的属性'status'状态”,而对于显示联系人确实可以正常工作。但是,对于更新用户来说并没有。 这是Action文件夹Index.js文件中Action函数的创建者。 还想提到新用户在db中更新就好了。 谢谢
export const updateUser = user => {
return async dispatch => {
try {
const response = axios.patch(`${backend_URL}/users/me/edit`, user);
const newUser = {
...JSON.parse(localStorage.getItem("user")),
...response.data.req.user
};
localStorage.setItem("user", JSON.stringify(newUser));
dispatch({ type: "UPDATE_USER", payload: response.data.req.user });
history.push("/users/me");
} catch (err) {
if (err.response.status === 401) {
dispatch({
type: "SET_ALERT",
payload: { msg: err.response.data.error, type: "danger" }
});
history.push("/users/login");
} else {
dispatch({
type: "SET_ALERT",
payload: { msg: err.response.data.error, type: "danger" }
});
}
}
};
};
答案 0 :(得分:0)
axios.patch返回承诺。因此需要处理。您可以使用await axios.patch来处理承诺。
答案 1 :(得分:0)
对象err没有称为response的属性。相反,您应该使用有效的属性,例如 name 或 message :
我没关系,您可以获取错误状态,因此请按名称获取。
export const updateUser = user => {
return async dispatch => {
try {
const response = axios.patch(`${backend_URL}/users/me/edit`, user);
const newUser = {
...JSON.parse(localStorage.getItem("user")),
...response.data.req.user
};
localStorage.setItem("user", JSON.stringify(newUser));
dispatch({ type: "UPDATE_USER", payload: response.data.req.user });
history.push("/users/me");
} catch (err) {
if (err.name === "ReferenceError") {
dispatch({
type: "SET_ALERT",
payload: { msg: err.message, type: "danger" }
});
history.push("/users/login");
} else {
dispatch({
type: "SET_ALERT",
payload: { msg: err.message, type: "danger" }
});
}
}
};
};
查看有关错误的文档:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error