我试图捕获我在后端创建的自定义错误,但 Axios 和 fetch 没有得到
res.status(401).json({msg:"custom error name"})
我已经收到 catch 的响应,但没有错误,没有消息
try {
const loginUser = { email: user.email, password: user.password };
const loginRes = await Axios.post(
"http://localhost:4000/snackhub/login",
loginUser
);
localStorage.setItem("auth-token", loginRes.data.token);
dispatch(fetchUsers());
history.push("/");
} catch (err) {
console.log(err.response);
err.response.data.msg && console.log(err.response.data.msg); //hopefully i can display this thhe custom error from the backend
}
以下是后端错误的示例:
const { error } = await logInValidation(req.body);
if (error) return res.status(400).json({ msg: error.message[0].details }); //is there something wrong in my syntax here?
const userExists = await Customer.findOne({ email: email });
if (!userExists)
return res.status(400).json({ msg: "email is not registered" });
我面临着同样的问题,我找到了解决这个问题的方法。你可以试试
console.log(error.response.data)
。这将打印从您的服务器发送的 JSON 响应...
即:res.status(500).json({message: "Custom error message"})
可以在客户端使用 axios 访问:
axios.get(url)
.then(response => {
// your logic
})
.catch(err => {
console.log(err.response.data.message)
})
试试这个:
axios.post("http://localhost:4000/snackhub/login",
loginUser)
.then(res => {
},
error => {
}
);
对于发送错误或任何响应,您应该这样写。
res.status(422).send({ success: false, error: "User already exist!" });
axios
中的错误处理与其他的有点不同。在这里,您可以在 response
块中的错误对象中获取 catch
对象。我建议您记录响应,然后进行相应处理。
一个例子是这样的:
axios.post(url, data).then(res => {
// do good things
})
.catch(err => {
if (err.response) {
// client received an error response (5xx, 4xx)
} else if (err.request) {
// client never received a response, or request never left
} else {
// anything else
}
})