AXIOS 和 FETCH 在 NODE JS 中未收到自定义错误

问题描述 投票:0回答:4

我试图捕获我在后端创建的自定义错误,但 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" });
javascript node.js reactjs axios fetch
4个回答
1
投票

我面临着同样的问题,我找到了解决这个问题的方法。你可以试试

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)
})

0
投票

试试这个:

axios.post("http://localhost:4000/snackhub/login",
    loginUser)
.then(res => {
                        
},
error => {

}
);

0
投票

对于发送错误或任何响应,您应该这样写。

res.status(422).send({ success: false, error: "User already exist!" });

0
投票

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
    }
})
© www.soinside.com 2019 - 2024. All rights reserved.