在猫鼬中级联创建/删除集合的好方法

时间:2017-07-04 20:23:31

标签: node.js mongodb mongoose mongoose-schema

是否有正确的方法可以删除第一个或第二个集合?

我觉得它是第二个,但第一个更容易使用。是否可以使用promise来简化代码的读取?

第一种方式:

beforeEach((done) => { 
    //Before each test we empty the database

    //Remove Roles
    Role.remove({}, (err) => {});

    //Remove Users
    User.remove({}, (err) => {});

    // Remove Workouts
    Workout.remove({}, (err) => {});

    // Create user
    Role.create({"name" : "Administrator"},(err, adminRole) => {
        User.create({ firstname : "***", businessId: "1", lastname : "***", email : "***", roles:[adminRole]}, (err) => { 
            done();             
        });
    });
});`

第二种方式:

beforeEach((done) => { 
    //Before each test we empty the database

    //Remove Roles
    Role.remove({}, (err) => {
        //Remove Users
        User.remove({}, (err) => {
            // Remove Workouts
            Workout.remove({}, (err) => {
                // Create user
                Role.create({"name" : "Administrator"},(err, adminRole) => {
                    User.create({ firstname : "***", businessId: "1", lastname : "***", email : "***", roles:[adminRole]}, (err) => { 
                        done();             
                    });
                });
            });
        });
    });
});

1 个答案:

答案 0 :(得分:2)

第二个选项是最安全的选项,因为如果操作中发生错误,则不会执行下一个选项。

确定你应该使用承诺。代码变得更清洁了:

Role.remove({})
  .then(() => User.remove({})
  .then(() => Workout.remove({})
  .then(() => Role.create({"name" : "Administrator"})
  .then((adminRole) => User.create({ firstname : "***", businessId: "1", lastname : "***", email : "***", roles:[adminRole]})
  .then(() => done())
  .catch((error) => ...);

为了能够使用promises,您可以将mongoose的promise设置为本机(只要您的节点版本是> = 6):

mongoose.Promise = global.Promise;