在我的express
应用中,我使用mongoose
作为ODM,但问题属于通用性质。在我的控制器中,我有多个像这样的阻塞查询(修剪版本):
export const create = async (req, res) => {
const existing_user = await User.findOne({ email: req.body.email });
if (!existing_user) {
const user = await (new User(req.body)).save();
const setting = await (new Setting({ user_id: user })).save();
return res.status(200).json({message:"User registered successfully.", user});
}
res.status(400).json({message: 'User with this email already exists.'});
};
在此控制器中,我注册了一个用户,并在多个collections
中创建了他的记录。
问题是,如果由于某种原因在setting
集合中创建记录时出现一些错误,它会抛出错误并停止执行,但现在用户将有一个记录user
集合中没有相关记录的setting
集合。
我的问题是,如何确保它在两个集合中成功创建记录,或者在任何查询失败的情况下,它不应该在任何集合中创建记录。我的方法应该是什么?