下面,我通过FB / Google进行身份验证后注册了一个用户。这里的问题在try块中。当我抛出错误时(例如,当displayName已经被使用或用户已经注册时),catch块被触发,但是它似乎继续在try块中执行代码,因为抛出错误后,我总是在浏览器中重定向到'/ '(try块中的最后一行代码)。
一种解决方案是在客户端以编程方式导航用户,但我不明白为什么现有代码无法按预期工作。
app.post("/auth/register", requireAuth, async (req, res) => {
try {
if (req.user.registered === true) {
throw new Error("You have already registered.")
}
const existingUser = await User.findOne({
displayName_lower: req.body.displayName
});
if (existingUser) {
throw new Error("Display name already is use! Try another.");
}
await User.findByIdAndUpdate(
{ _id: req.user.id },
{
displayName: req.body.displayName,
displayName_lower: req.body.displayName,
registered: true,
joined: Date.now()
}
);
// Create and save new faves, follows, followers, messageBox doc for every newly reg'd user
await new Faves({
_owner: req.user.id
}).save();
await new Follows({
_owner: req.user.id
}).save();
await new Followers({
_owner: req.user.id
}).save();
await new MessageBox({
_owner: req.user.id
}).save();
res.redirect("/");
} catch (e) {
res.status(400).send({ error: e.message });
}
});