我怎样才能在reactjs中得到在nodejs上抛出的错误消息
How can i get a error message thrown on nodejs in reactjs
我正在尝试显示我在后端抛出的错误消息,以防用户已经注册,但我没有得到我想要的结果。
后端代码:
module.exports.register = asyncHandler(async (req, res) => {
const { fullname, email, password } = req.body;
let user = await User.findOne({ email: email });
if (user) throw new Error("Email e/ou senha inválidos!");
user = await User.create({ fullname, email, password });
if (user) {
res.json({
_id: user._id,
name: user.fullname,
email: user.email,
token: tokenGenereator(user._id),
});
} else {
throw new Error("algo deu errado");
}
前端代码:
export const register = ({ fullname, email, password }) => {
return async (dispatch) => {
try {
const config = {
headers: {
"Content-type": "application/json",
},
};
const data = await axios.post(
"http://localhost:5000/api/register",
{
fullname,
email,
password,
},
config
);
dispatch(
uiActions.showNotificatoin({
variant: "success",
message: "Usuário cadastrado com sucesso!",
})
);
localStorage.setItem("userInfo", JSON.stringify(data));
} catch (error) {
console.log(error.response.data.error)
}
};
};
这是我在控制台上得到的结果。
我必须做什么才能显示我发送的消息?
您一定是抛出错误而没有任何外部捕获层。你可能想做这样的事情
if (user)
return res.status(409).json({ message: "Email e/ou senha inválidos!" });
在前端你需要捕获错误并像这样使用错误
if (error.response && error.response.data.message) {
// custom message you sent from backend
console.log(error.response.data.message);
} else {
// generic error message
console.log(error.message);
}
它适用于您的情况。但理想情况下,对于大型项目,错误应该从控制器 repo 中抛出,并且必须由外层捕获,并且作为响应将完成上述工作。
HTTP 响应代码用于从后端向前端抛出错误 HTTP 响应状态代码指示特定 HTTP 请求是否已成功完成。阅读有关 HTTP 响应代码的更多信息。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
200
状态码表示OK状态。 409
状态码表示
冲突状态。
后端代码:
if (!user) { // by deafult ok status
res.json({
_id: user._id,
name: user.fullname,
email: user.email,
token: tokenGenereator(user._id),
});
} else { // in case of user found
res.status(409).json("algo deu errado");
}
前端代码:
export const register = ({ fullname, email, password }) => {
return async (dispatch) => {
try {
const config = {
headers: {
"Content-type": "application/json",
},
};
const data = await axios.post(
"http://localhost:5000/api/register",
{
fullname,
email,
password,
},
config
);
dispatch(
uiActions.showNotificatoin({
variant: "success",
message: "Usuário cadastrado com sucesso!",
})
);
localStorage.setItem("userInfo", JSON.stringify(data));
} catch (error) {
if (error.response && error.response.data.message===409) {
alert('user already exist');
} else {
console.log('No Internet Connection');
}
}
};
};
我正在尝试显示我在后端抛出的错误消息,以防用户已经注册,但我没有得到我想要的结果。
后端代码:
module.exports.register = asyncHandler(async (req, res) => {
const { fullname, email, password } = req.body;
let user = await User.findOne({ email: email });
if (user) throw new Error("Email e/ou senha inválidos!");
user = await User.create({ fullname, email, password });
if (user) {
res.json({
_id: user._id,
name: user.fullname,
email: user.email,
token: tokenGenereator(user._id),
});
} else {
throw new Error("algo deu errado");
}
前端代码:
export const register = ({ fullname, email, password }) => {
return async (dispatch) => {
try {
const config = {
headers: {
"Content-type": "application/json",
},
};
const data = await axios.post(
"http://localhost:5000/api/register",
{
fullname,
email,
password,
},
config
);
dispatch(
uiActions.showNotificatoin({
variant: "success",
message: "Usuário cadastrado com sucesso!",
})
);
localStorage.setItem("userInfo", JSON.stringify(data));
} catch (error) {
console.log(error.response.data.error)
}
};
};
这是我在控制台上得到的结果。
我必须做什么才能显示我发送的消息?
您一定是抛出错误而没有任何外部捕获层。你可能想做这样的事情
if (user)
return res.status(409).json({ message: "Email e/ou senha inválidos!" });
在前端你需要捕获错误并像这样使用错误
if (error.response && error.response.data.message) {
// custom message you sent from backend
console.log(error.response.data.message);
} else {
// generic error message
console.log(error.message);
}
它适用于您的情况。但理想情况下,对于大型项目,错误应该从控制器 repo 中抛出,并且必须由外层捕获,并且作为响应将完成上述工作。
HTTP 响应代码用于从后端向前端抛出错误 HTTP 响应状态代码指示特定 HTTP 请求是否已成功完成。阅读有关 HTTP 响应代码的更多信息。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
200
状态码表示OK状态。409
状态码表示 冲突状态。
后端代码:
if (!user) { // by deafult ok status
res.json({
_id: user._id,
name: user.fullname,
email: user.email,
token: tokenGenereator(user._id),
});
} else { // in case of user found
res.status(409).json("algo deu errado");
}
前端代码:
export const register = ({ fullname, email, password }) => {
return async (dispatch) => {
try {
const config = {
headers: {
"Content-type": "application/json",
},
};
const data = await axios.post(
"http://localhost:5000/api/register",
{
fullname,
email,
password,
},
config
);
dispatch(
uiActions.showNotificatoin({
variant: "success",
message: "Usuário cadastrado com sucesso!",
})
);
localStorage.setItem("userInfo", JSON.stringify(data));
} catch (error) {
if (error.response && error.response.data.message===409) {
alert('user already exist');
} else {
console.log('No Internet Connection');
}
}
};
};