所有数据库查询都应运行或根本不运行

时间:2017-10-16 20:31:54

标签: node.js database mongodb express async-await

在我的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集合。

我的问题是,如何确保它在两个集合中成功创建记录,或者在任何查询失败的情况下,它不应该在任何集合中创建记录。我的方法应该是什么?

0 个答案:

没有答案