大家好,我正在尝试处理 Express 用户注册模块期间的错误,但不知何故,错误处理不正确。 这是我的代码
handler.post(async (req, res) => {
let otp = Math.floor(1000 + Math.random() * 9000);
const salt = await bcrypt.genSalt(10);
const hashedpassword = await bcrypt.hash(data.password, salt);
data["password"] = hashedpassword;
data["otp"] = otp;
data["active"] = false;
delete data.confirmPassword;
try {
const emailexist = await req.db
.collection("users")
.findOne({ email: data.email });
if (emailexist) {
return res.status(401).send('email already exits')
} else {
let doc = await req.db.collection("users").insertOne(data);
res.json(doc.ops[0]);
} catch (err) {
console.log(err);
res.status(401).send("Error while adding");
}
});
因此,正如您所看到的,如果电子邮件存在,则有两次出错的机会,如果是这种情况,我将发回错误
第二个机会是,如果在插入时间内在 catch 块中也发生任何错误,我将发送错误,但不知何故,当我遇到第一个错误“如果电子邮件已存在”时,它仍然在我的前端中,我收到的响应是“添加时出错”
我就是这样做的,所以如果用户已经存在,你会发回一个带有状态的json
400
(错误的请求,表明服务器无法或不会处理该请求)
if (emailexist) {
return res.status(400).json({error:"User Already Exists"})
}
并且在捕获中您发送了状态
500
,表明服务器端出了问题
res.status(500).send("Server error");